Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 5/2011.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Verwenden Sie die Methoden des FileSystemObject-Objekts, um auf Laufwerke, Verzeichnisse und Dateien zuzugreifen und damit zu arbeiten.

Techniken

VBA, FileSystemObject

Voraussetzungen

Access 2000 und höher

Beispieldateien

FileSystemObject.mdb

Shortlink

www.access-im-unternehmen.de/794

Dateisystem im Griff mit dem FileSystemObject

André Minhorst, Duisburg

Für viele Fälle reichen die in VBA integrierten Befehle wie Dir, MkDir, Kill oder Copy aus. Manchmal stoßen Sie damit aber an die Grenzen der VBA-Bibliothek. In diesem Fall hilft möglicherweise das FileSystemObject weiter. Es bietet umfangreiche Möglichkeiten, auf Laufwerke, Verzeichnisse und Dateien zuzugreifen. Dieser Beitrag zeigt, wie Sie das FileSystemObject verfügbar machen und welche interessanten Aktionen Sie damit durchführen können.

Das FileSystemObject ist Bestandteil der Bibliothek Microsoft Scripting Runtime, die Sie zur einfacheren Programmierung per IntelliSense per Verweis einbinden (s. Abb. 1). Den Verweise-Dialog öffnen Sie über den Menübefehl Extras|Verweise des VBA-Editors.

pic001.png

Abb. 1: Verweis auf die Microsoft Scripting Runtime

Objekte

Das Objekt FileSystemObject ist das Hauptobjekt für den Zugriff auf Laufwerke, Verzeichnisse und Dateien. Wenn Sie auf eines dieser Objekte zugreifen möchten, benötigen Sie meist eine der Methoden des FileSystemObjects. Um das FileSystemObject zu nutzen, deklarieren und instanzieren Sie es zuvor:

Dim objFSO As Scripting.FileSystemObject

Set objFSO = New Scripting.FileSystemObject

Danach greifen Sie per IntelliSense bequem auf seine Eigenschaften und Methoden zu.

Existenz von Laufwerken, Verzeichnissen und Dateien prüfen

In vielen Fällen werden Sie vor einer Aktion mit dem jeweiligen Objekt prüfen, ob dieses überhaupt existiert.

Beim Laufwerk liefert die Funktion DriveExists die notwendige Information. Das folgende Beispiel zeigt für einen modernen Rechner, dass es zwar ein Laufwerk mit dem Buchstaben c gibt, aber keines mit dem Buchstaben a:

Dim objFSO As Scripting.FileSystemObject

Set objFSO = New Scripting.FileSystemObject

Debug.Print objFSO.DriveExists("a")

Debug.Print objFSO.DriveExists("c")

Bei Verzeichnissen ist die Funktion FolderExists für die Prüfung der Existenz verantwortlich. Die folgenden Zeilen belegen, dass das Verzeichnis, in dem sich die aktuelle Datenbank befindet, tatsächlich vorhanden ist:

Debug.Print objFSO.FolderExists(CurrentProject.Path)

Ähnlich sieht es bei den Dateien aus - hier muss die Funktion FileExists Ihren Dienst verrichten. Die folgende Zeile liefert hoffentlich den Wert True zurück:

Debug.Print objFSO.FileExists(CurrentDb.Name)

Laufwerke

Auf die Laufwerke können Sie direkt mithilfe der Auflistung Drives des FileSystemObject-Objekts zugreifen. Die Anzahl der Laufwerke ermitteln Sie mit der Eigenschaft Drives.Count.

Den Zugriff auf die einzelnen Laufwerk-Objekte über die Item-Eigenschaft erhalten Sie nur durch Angabe des Laufwerkbuchstabens:

With objFSO

    Debug.Print "Laufwerke: ", .Drives.Count

    Debug.Print .Drives.Item("c").VolumeName

End With

Wenn Sie alle Laufwerke samt Laufwerksbuchstabe und weiteren Informationen ermitteln möchten, greifen Sie per For Each-Schleife darauf zu.

Beispiele für den Zugriff auf die Elemente der Drives-Auflistung haben wir im Formular frmLaufwerke und dessen Klassenmodul untergebracht.

Als erstes soll das Kombinationsfeld mit dem Laufwerksbuchstaben in der gebundenen, unsichtbaren Spalte und dem Pfad als sichtbarem Eintrag gefüllt werden.

Dies erledigt die folgende Prozedur, die zunächst in einer For Each-Schleife alle Laufwerke des aktuellen Systems durchläuft. Dabei trägt Sie die für die Anzeige im Kombinationsfeld nötigen Daten zusammen. Das Ergebnis sieht etwa so aus:

C;C:;D;D:;E;E:;F;F:;G;G:;

Es wird also für jedes Laufwerk zunächst der einzelne Buchstabe und dann der Pfad ausgegeben. Da das Kombinationsfeld den Wert Wertliste für die Eigenschaft Herkunftsart sowie die Werte 2 und 0cm für die Eigenschaften Spaltenanzahl und Spaltenbreiten enthält, zeigt es genau die Pfade an (s. Abb. 2).

pic002.png

Abb. 2: Formular zur Anzeige von Laufwerksdaten

Der erste Eintrag wird gleich beim Laden des Formulars ausgewählt und die Prozedur DatenLesen ausgeführt, die das Formular mit weiteren Laufwerkseigenschaften füllt (s. Listing 1).

Listing 1: Einlesen von Informationen über das aktuell ausgewählte Laufwerk

Private Sub Form_Load()

    Dim objDrive As Scripting.Drive

    Dim strDrives As String

    Set objFSO = New Scripting.FileSystemObject

    For Each objDrive In objFSO.Drives

        With objDrive

            strDrives = strDrives & objDrive.DriveLetter & ";" & objDrive.Path & ";"

        End With

    Next objDrive

    Me!cboLaufwerke.RowSource = strDrives

    Me!cboLaufwerke = Me!cboLaufwerke.ItemData(0)

    DatenLesen

End Sub

Die Prozedur DatenLesen wird nicht nur beim Laden, sondern auch nach dem Auswählen eines anderen Eintrags im Kombinationsfeld cboLaufwerke aufgerufen. Sie füllt die Textfelder des Formulars mit weiteren Informationen, die allesamt das jeweilige Drive-Objekt bereitstellt (s. Listing 2).

Listing 2: Einlesen von Informationen über das aktuell ausgewählte Laufwerk

Private Sub DatenLesen()

    Dim objDrive As Scripting.Drive

    Set objDrive = objFSO.Drives(Me!cboLaufwerke)

    With objDrive

        Me!txtDriveletter = .DriveLetter

        Me!txtDriveType = .DriveType

        Me!txtPath = .Path

        Me!txtShareName = .ShareName

        If .IsReady Then

            Me!txtFileSystem = .FileSystem

            Me!txtFreeSpace = .FreeSpace

            Me!txtRootFolder = .RootFolder

            Me!txtSerialNumber = .SerialNumber

            Me!txtTotalSize = .TotalSize

            Me!txtVolumename = .VolumeName

        Else

            MsgBox "Laufwerk '" & Me!cboLaufwerke.Column(1) & "' nicht bereit."

            Me!txtFileSystem = Null

            Me!txtFreeSpace = Null

            Me!txtRootFolder = Null

            Me!txtSerialNumber = Null

            Me!txtTotalSize = Null

            Me!txtVolumename = Null

        End If

    End With

End Sub

Sollte das jeweilige Laufwerk nicht bereit sein, was beispielsweise bei CD- oder DVD-Laufwerken geschieht, die gerade keinen Datenträger enthalten, erscheint eine Meldung und es werden entsprechend weniger Informationen im Formular angezeigt. Diesen Zustand fragen Sie übrigens mit der Eigenschaft IsReady ab.

Verzeichnisse lesen

Prinzipiell ist c:\ auch ein Verzeichnis, zumindest wenn man der Nomenklatur des Objektmodells unterhalt des FileSystemObject-Objekts glaubt. Die Eigenschaft RootFolder liefert nämlich genau diese Information. Allerdings tut sie das nur, weil RootFolder ein eigenes Objekt mit der Eigenschaft Name als Standardeigenschaft ist. Mit der Eigenschaft RootFolder können Sie also auch ein Objekt des Typs Folder referenzieren - und zwar zum Beispiel c:\.

Unterhalb eines Laufwerks gibt es in der Regel einen oder mehrere Verzeichnisse. Auf diese greifen Sie über die Folders-Auflistung des Drive-Objekts zu.

Wenn Sie zuvor das RootFolder-Objekt eines Verzeichnisses ermitteln, in diesem Fall c:, greifen Sie wie folgt auf die unterhalb von c:\ liegenden Verzeichnisse zu und geben diese im Direktfenster aus (s. Listing 3).

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.