HINWEIS
Kapitel 11: Dateien und Verzeichnisse
If a And 16 Then s = s & "D" Else s = s & " " ' directory
If a And 32 Then s = s & "A" Else s = s & " " ' archiv
If a And 64 Then s = s & "L" Else s = s & " " ' link
If a And 128 Then s = s & "C" Else s = s & " " ' compressed
DecodeAttribute = s
End Function
Die eigentliche Ausgabe aller Dateien:
Dim myfso As FileSystemObject
Dim myf1 As Folder, myf2 As File
Set myfso = CreateObject("Scripting.FileSystemObject")
Set myf1 = myfso.GetFolder("c:\")
Debug.Print myf1.Name
For Each myf2 In myf1.Files
Debug.Print DecodeAttribute(myf2.Attributes) & " " & myf2.Name & Format(myf2.Size, _
" ###,###,###,##0 Bytes")
Next
Set myfso = Nothing
Beachten Sie die Formatierung der Dateigröße: Als letzten Platzhalter müssen Sie eine Null (0) verwenden,
andernfalls wird bei einer Dateigröße von 0 Bytes keine Zahl angezeigt.
Abbildung 11.8 Ausgabe im Direktfenster
Name, Pfad und Extension einer Datei ermitteln
Wer schon einmal mit der Programmiersprache Pascal gearbeitet hat, kennt sicherlich noch die Funktion
FileSplit, mit der man eine vollständige Pfadangabe in die drei Komponenten Verzeichnis, Dateiname und
Extension zerlegen konnte.
VBA bietet leider keine solch komfortable Funktion, obwohl sie häufig gebraucht wird, beispielsweise für
die SELECT-Klausel in SQL-Strings:
SELECT * INTO " & file & " IN '" & path & "' 'dBase IV;' FROM [ADRESSE]
Woher aber wollen Sie die beiden Bezeichner für file und path nehmen, wenn nur ein kompletter
Dateiname wie zum Beispiel C:\Daten\Dbase\Adressen\Adresse.dbf vorliegt?
Die folgende Prozedur zerlegt den Dateinamen s in Pfad, Name und Extension:
696
HINWEIS
HINWEIS
BEISPIEL
Sub FileSplit(ByVal s As String, path As String, file As String, ext As String)
Dim i As Integer
For i = Len(s) To 1 Step -1
If Mid$(s, i, 1) = "\" Then ' keine Extension vorhanden
ext = "" : Exit For
End If
If Mid$(s, i, 1) = "." Then
ext = Right$(s, Len(s) – i)
s = Left$(s, i – 1) : Exit For
End If
Next i
i = Len(s)
If InStr(s, "\") <> 0 Then
Do While Mid$(s, i, 1) <> "\"
i = i – 1
Loop
End If
path = Left$(s, i)
file = Right$(s, Len(s) – i)
End Sub
Die zusätzliche Angabe von ByVal für den ersten Parameter ist unbedingt erforderlich, da sonst die über-
gebene Variable durch die Prozedur verändert werden würde.
Übergeben Sie der Prozedur die Werte in folgender Reihenfolge:
Dateibezeichnung
Variable für das Verzeichnis
Variable für den Dateinamen
Variable für die Extension
Die Funktion prüft zuerst auf das Vorhandensein eines Punktes. Ist dieser vorhanden, werden alle rechts
befindlichen Zeichen als Extension interpretiert. Bei der Suche nach dem Punkt ist unbedingt am Ende des
Strings anzufangen, da ein Dateiname auch mehrere Punkte enthalten kann. Danach wird der am weitesten
rechts stehende Backslash (\) gesucht. An dieser Stelle ist der String zu teilen.
Beachten Sie, dass die Verzeichnisangabe immer mit einem Backslash abgeschlossen wird.
1
Der Dateinamen für die aktuelle Datenbank
C:\Users\Chef\Test.accdb
wird »zerlegt« und das Ergebnis in drei
Bezeichnungsfeldern angezeigt:
Dim s As String, pfad As String, fileName As String, ext As String
s = Application.CurrentDb.Name
FileSplit s, pfad. fileName, ext
Bezeichnungsfeld1.Caption = pfad ' zeigt »C:\Users\Chef\«
Bezeichnungsfeld2.Caption = fileName ' zeigt »Test«
Bezeichnungsfeld3.Caption = ext ' zeigt »accdb«
697
Zugriff auf das Dateisystem

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.