HINWEIS
Ist die Datei nicht vorhanden, so wird sie beim Speichern neu angelegt und mit dem Arrayinhalt gefüllt.
Bemerkungen
Das Beispiel dürfte recht anschaulich den Datenaustausch zwischen einem temporären Speichermedium
(dynamisches Array) und einem persistenten Speichermedium (Textdatei) verdeutlichen.
Anstatt wie in unserem Beispiel für den Dateizugriff die »Uralt-Basic«-Befehle (Open, Print, ...) zu be-
nutzen, könnten Sie als moderne Alternative auch die FSO (File System Objects) verwenden, allerdings
ist dazu die Einbindung der »Microsoft Scripting Runtime«-Bibliothek erforderlich (siehe Seite 701).
Auch die zu Mobiltelefonen mitgelieferte Software benutzt häufig Textdateien zum Übertragen bzw.
Speichern von Verzeichnissen, Kalendereinträgen etc. auf die Festplatte des Rechners, wobei ein ähn-
liches Format wie in unserem Beispiel zum Einsatz kommt.
Dateien suchen
WinAPI: FindFirstFile-, FindNextFile-, FindClose-Funktionen;
Für das Suchen von Dateien bietet der Einsatz von API-Funktionen eine schnelle und einfach zu realisie-
rende Möglichkeit, die auch rekursive Aufrufe unterstützt.
Oberfläche
Erforderlich sind drei ungebundene Textfelder (davon ein mehrzeiliges) sowie eine Befehlsschaltfläche. Die
Verwendung von Bezeichnungsfeldern bleibt Ihnen überlassen.
Abbildung 11.18 Laufzeitansicht des Formulars
Quelltext
Wie nicht anders zu erwarten, müssen zunächst einige API-Deklarationen eingefügt werden:
Private Const MAX_PATH = 259
735
Praxisbeispiele
Kapitel 11: Dateien und Verzeichnisse
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _
(ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
Lassen Sie sich nicht abschrecken, das eigentliche Programm ist wesentlich kürzer, als es obige Funktionen er-
warten lassen. Der Funktion
GetAllFiles
übergeben Sie einfach den Suchpfad sowie das Suchkriterium (z.B.
*.* für alle Dateien):
Sub GetAllFiles(directory As String, mask As String)
Dim rec As WIN32_FIND_DATA
Dim filename As String
Dim fh As Long
DoEvents
If Right$(directory, 1) <> "\" Then directory = directory & "\"
fh = FindFirstFile(directory & mask, rec)
If fh = 0 Then Exit Sub
Do
filename = Left$(rec.cFileName, InStr(rec.cFileName, Chr(0)) – 1)
If (rec.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY)=FILE_ATTRIBUTE_DIRECTORY _
Then
If (filename <> ".") And (filename <> "..") Then GetAllFiles directory & filename, mask
Else
dateien = dateien & directory & filename & Chr(13) & Chr(10)
End If
Loop While FindNextFile(fh, rec)
FindClose fh
End Sub
Sollen weitere Selektionen über die Dateiattribute vorgenommen werden, müssen Sie diese mit den FILE...-
Konstanten durchführen (siehe
If (rec.dwFileAttributes And FILE_ATTRIBUTE ...)
). Wenn es Sie interessiert,
können Sie über die Struktur
WIN32_FIND_DATA
weitere Informationen über die Datei einholen (Größe,
Datum, DOS-Name usw.).
736

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.