Die VBA-eigenen Befehle wie Dir, MkDir, Kill, Copy und so weiter erlauben grundlegende Dateioperationen. Wenn es etwas komfortabler sein darf, gibt es jedoch noch andere Möglichkeiten. Eine davon ist die Klasse FileSystemObject, die Sie in der Bibliothek Microsoft Scripting Runtime finden. Im Artikel Das FileSystemObject: Verzeichnisse haben wir die Grundlagen zu dieser Bibliothek und zum Umgang mit Laufwerken und Verzeichnissen erläutert. Dieser Artikel zeigt, welche Möglichkeiten diese Bibliothek im Hinblick auf den Umgang mit Dateien bietet.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1902_FileSystemObject_Files.accdb.
Der oben genannte Artikel hat die Grundlagen zum FileSystemObject und zu den Auflistungen Drives und Folders sowie den Klassen Drive und Folder erläutert. Nun gehen wir einen Schritt weiter und schauen uns an, wie wir mit den in den Verzeichnissen enthaltenen Dateien arbeiten können. Diese referenzieren wir über die Files-Auflistung beziehungsweise im Falle einer einzelnen Datei über die File-Klasse.
Schneller Zugriff auf ein FileSystemObject-Objekt
Wie schon im Artikel Das FileSystemObject: Verzeichnisse beschrieben, verwenden wir die folgende private Variable und die öffentliche Property Get-Prozedur, um schnell Zugriff auf eine Instanz der FileSystemObject-Klasse zu erhalten:
Private m_FSO As FileSystemObject Public Property Get FSO() As FileSystemObject If m_FSO Is Nothing Then Set m_FSO = New FileSystemObject End If Set FSO = m_FSO End Property
Sie können dann einfach über den Ausdruck FSO auf das FileSystemObject zugreifen – also etwa so:
Debug.Print FSO.Drives.Count
Dateien auflisten
Wenn wir Dateien auflisten wollen, benötigen wir zunächst ein Folder-Objekte, also ein Verzeichnis, in dem die zu untersuchenden Dateien enthalten sind. Wir beschäftigen uns mit dem Verzeichnis der aktuellen Datenbank, das wir mit dem VBA-Befehl CurrentProject.Path auslesen. Das dazugehörige Folder-Objekte erhalten wir mit der GetFolder-Methode:
Public Sub DateienAuflisten() Dim objFile As File Dim objFolder As Folder Set objFolder = FSO.GetFolder(CurrentProject.Path) For Each objFile In objFolder.Files Debug.Print objFile.Name Next objFile End Sub
In der Prozedur ermitteln wir das Folder-Objekt und durchlaufen alle in der Files-Auflistung dieses Verzeichnisses enthaltenen File-Objekte. Wir geben zu jedem File-Objekt den Namen aus der Eigenschaft Name im Direktbereich aus. Auf die gleiche Weise können wir die folgenden Informationen des File-Objekts ausgeben lassen:
- Attributes: Gibt einen Zahlenwert für verschiedene Attributwerte zurück.
- DateCreated: Gibt das Erstellungsdatum zurück.
- DateLastAccessed: Gibt das Datum des letzten Zugriffs zurück.
- DateLastModified: Gibt das Datum der letzten änderung zurück.
- Name: Gibt den Namen der Datei aus.
- Path: Gibt den Pfad der Datei zurück.
- ShortName: Gibt den Dateinamen im 8.3-Format zurück.
- ShortPath: Gibt den Pfad zur Datei im 8.3-Format zurück.
- Size: Gibt die Größe der Datei zurück.
- Type: Gibt den Dateityp zurück.
Wenn Sie all diese Informationen für die Dateien aus der obigen Prozedur ausgeben wollen, erweitern Sie den Inhalt der For Each-Schleife wie folgt:
With objFile Debug.Print .Name, .Attributes, .DateCreated, .DateLastAccessed, .DateLastModified, .Path, .ShortName, .ShortPath, .Type End With
Für die Eigenschaft Type erhalten wir Texte wie etwa Microsoft Access Database, LACCDB-Datei oder Snagit Editor Image. Teilweise werden hier Typen ausgeben, die mit der standardmäßig zu öffnenden Anwendung zusammenhängen, teilweise nur die Dateiendung.
Eigenschaften mit Objekten
Es gibt zwei Eigenschaften, die Verweise auf Objekte zurückliefern:
- Drive: Gibt das Drive-Objekt zu der Datei zurück.
- ParentFolder: Gibt das Folder-Objekt zurück, in dem sich die Datei befindet.
Methoden und Funktionen des File-Objekts
Das File-Objekt enthält neben den bereits erwähnten Eigenschften noch die folgenden Methoden und Funktionen:
- Copy: Kopiert die Datei an den angegebenen Zielpfad.
- Delete: Löscht die referenzierte Datei.
- Move: Verschiebt die Datei an den angegebenen Zielpfad.
- OpenAsTextStream: öffnet die Datei als Text-Stream.
Elemente der FileSystemObject-Klasse für den Umgang mit File-Objekten
Und auch die FileSystemObject-Klasse stellt noch Eigenschaften, Methoden und Funktionen bereit, die Sie in Zusammenhang mit File-Objekten verwenden können:
- CopyFile: Kopiert eine Datei. Erwartet Quell- und Zielpfad als Parameter.
- CreateTextFile: Erstellt ein TextStream-Objekt, das als Textdatei gespeichert wird.
- DeleteFile: Löscht die als Pfad angegebene Datei.
- FileExists: Untersucht, ob eine Datei existiert.
- GetBaseName: Liefert den Dateinamen ohne Dateiendung.
- GetExtensionName: Liefert die Dateiendung.
- GetFile: Liefert das File-Objekt zur Datei mit dem als Parameter angegebenen Pfad.
- GetFileName: Liefert den kompletten Dateinamen.
- GetFileVersion: Liefert die Dateiversion von .exe– und .dll-Dateien.
- GetStandardStream: siehe Das FileSystemObject: Textdateien
- GetTempName: Ermittelt einen temporären Dateinamen.
- MoveFile: Verschiebt die Datei an den als Parameter angegebenen Pfad.
- OpenTextFile: siehe Das FileSystemObject: Textdateien
Elemente der Folder-Klasse für den Umgang mit File-Objekten
Und schließlich finden wir auch in der Folder-Klasse noch Methoden und Auflistungen für den Umgang mit File-Objekten. Die Files-Auflistung haben wir ja bereits weiter oben beschrieben:
- CreateTextFile: Erstellt ein TextStream-Objekt, das als Textdatei gespeichert wird.
- Files: Enthält eine Auflistung aller File-Objekte des Folder-Objekts.
Dateien als File-Objekte referenzieren
Eine erste Möglichkeit, wie Sie Dateien als File-Objekte referenzieren können, haben Sie ja bereits weiter oben kennengelernt – nämlich über die Auflistung Files eines Folder-Objekts.
Sie können aber auch auf ein File-Objekt zugreifen, wenn Sie nur seinen Pfad kennen. Dazu verwenden Sie die GetFile-Methode der FileSystemObjekt-Klasse:
Public Sub DateiReferenzieren() Dim objFile As File Dim strPfad As String strPfad = FSO.BuildPath(CurrentProject.Path, "pic001.png") Set objFile = FSO.GetFile(strPfad) Debug.Print objFile.Path End Sub
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: