Das FileSystemObject: Dateien

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:

Schreibe einen Kommentar