hhmmm, JaEin. Du kannst Access verwenden. Ist aber nicht gerade ein richtiges DBM-System, und ist nicht gerade die schnellste Möglichkeit. Aber in der Tat bestimmt etwas flotter als eine Textdatei mit ca. > 1000 Zeilen.
Oder ... du verwendest Serialize() an.
Hier ein Beispiel, welches sich in etwa an dein Konzept anlehnt:
Ein Files + File Klasse:
<Serializable()> Public Class Files
Public Array As ArrayList
Public Sub New()
Array = New ArrayList
End Sub
Public Sub New(ByVal File As Files.File)
Me.New()
Me.Array.Add(File)
End Sub
Public Sub New(ByVal Files As ArrayList)
Me.New()
Me.Array = Files.Clone
End Sub
Public Sub New(ByVal Files As String())
Me.New()
For Each file As String In Files
Me.Array.Add(New Files.File(file, New IO.FileInfo(file).Length))
Next
End Sub
Public Function GetFileName(ByVal Index As Integer) As String
Return CType(Me.Array(Index), file).FileName
End Function
Public Function GetFileSize(ByVal Index As Integer) As String
Return CType(Me.Array(Index), file).FileName
End Function
Public Function GetFile(ByVal Index As Integer) As Files.File
Return CType(Me.Array(Index), file)
End Function
<Serializable()> Public Class File
Public FileName As String
Public FileSize As Integer
Public Sub New(ByVal FileName As String, ByVal FileSize As Integer)
Me.FileName = FileName
Me.FileSize = FileSize
End Sub
Public Overrides Function ToString() As String
Return String.Format("Datei: {0} Größe: {1}", FileName, FileSize)
End Function
End Class
End Class Klasse füllen + serialisieren (Serialize):
Dim ser As New _
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim fs As IO.FileStream = IO.File.Open("files.dat", IO.FileMode.Create)
Dim files As Files
files = New Files(IO.Directory.GetFiles("C:\Windows"))
ser.Serialize(fs, files)
fs.Close() Klasse füllen aus der serialisierten Datei (Deserialize):
If IO.File.Exists(Application.StartupPath + "\files.dat") Then
Dim ser As New _
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim fs As IO.FileStream = IO.File.Open("files.dat", _
IO.FileMode.Open)
Dim files As Files = DirectCast(ser.Deserialize(fs), Files)
For Each file As Files.File In files.Array
Me.ListBox2.Items.Add(file.FileName)
Next
fs.Close()
End If Auf ein bestimmtes Element im Array kannst du so zugreifen:
MessageBox.Show(files.GetFileName(0))
MessageBox.Show(files.GetFileSize(0))
MessageBox.Show(files.GetFile(0).ToString) PS: Hab es einmal mit ca. 60000 Dateieinträgen (File) getestet und war sehr schnell!
Steve |