Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Autor: André Minhorst, Duisburg
!
Bei vielen Anwendungen ist es notwendig, Dateien oder Verzeichnisse auszuwählen und auf diese zuzugreifen. Das FileSystemObject der Scripting-Laufzeitbibliothek bietet eine Reihe von Methoden und Eigenschaften an, die praktisch jeden Zugriff auf das Filesystem von Windows erlauben. Im vorliegenden Beitrag lernen Sie einige interessante Beispiele für den Einsatz des FileSystemObjects in Zusammenarbeit mit Access kennen. Dazu basteln Sie sich einen kleinen Windows-Dateimanager in Form eines Access-Formulars, mit dem Sie bequem aus Ihrer Datenbankanwendung heraus kleinere Operationen wie z. B. das öffnen, Kopieren, Verschieben oder Löschen von Dateien und Verzeichnissen ausführen können.
Das FileSystemObject enthält Objekte, Methoden und Eigenschaften für den Zugriff auf die Laufwerke, Ordner und Dateien des Filesystems von Windows.
Sie können Informationen über alle genannten Objekte ermitteln und Ordner und Dateien erstellen, kopieren, ausschneiden, einfügen, bearbeiten und löschen.
Prinzipiell können Sie durch die Programmierung mit dem FileSystemObject alle Aufgaben erledigen, die auch der Windows-Explorer (siehe Bild 1) zur Verfügung stellt.
Bild 1: Der klassische Windows-Explorer
Wenn Sie die Methoden und Eigenschaften des FileSystemObjects mit den Möglichkeiten zusammenführen, die Access-Formulare bieten, können Sie sich Ihren eigenen kleinen Dateimanager mit Access erstellen und müssen nicht mehr auf die Windows-eigenen Möglichkeiten zurückgreifen.
Dies ist vor allem interessant, wenn Sie umfangreichere Datenbanken haben, die den gesamten Funktionsumfang abdecken, den Ihre Mitarbeiter benötigen.
Sie können den Dateimanager dann in die Access-Datenbank integrieren und müssen für einfache File-Operationen keine externe Anwendung mehr öffnen.
Außerdem können Sie nach Belieben spezielle Funktionen hinzufügen, z. B. das Ausdrucken einer Dateiliste auf Papier (beispielsweise für die Verwendung als CD-Cover) oder die vom Windows-Explorer nicht unterstützte Funktion, die Größe aller Verzeichnisse eines Laufwerks auf einen Blick anzuzeigen.
Das ist vor allem interessant, wenn Sie sich wieder einmal fragen, in welchen Verzeichnissen eigentlich die ganzen Daten stecken, die Ihre Festplatte hoffnungslos verstopfen. Mit dem Windows-Explorer müssen Sie hierzu nämlich die Eigenschaften jedes einzelnen Verzeichnisses anzeigen, während Sie mit einer selbst programmierten Funktion schnell die gewünschten Daten ermitteln können.
Hinweis
Um die Methoden und Eigenschaften des FileSystemObjects verwenden zu können, müssen Sie einen Verweis auf die entsprechende Bibliothek erstellen. Der Name der Bibliothek lautet Windows Scripting Runtime. Wie Sie einen Verweis auf eine Bibliothek erstellen, erfahren Sie in dem Beitrag Setzen von Verweisen auf Bibliotheken. Falls Sie diesen Verweis nicht finden, ist möglicherweise der Windows Scripting Host nicht installiert oder aktiviert: In dem Fall finden Sie die benötigte Software im Internet unter www.microsoft.com/msdownload/vbscript/scripting.asp.
Bild 2: Das Formular frmDateimanager mit seinen Steuerelementen in der Entwurfsansicht
Als Beispiel für die Anwendung der Eigenschaften und Methoden des FileSystemObjects erstellen Sie ein Formular, mit dem Sie Verzeichnisse und Dateien anzeigen sowie die unterschiedlichsten Operationen mit diesen Elementen durchführen können.
Erstellen Sie zunächst ein Beispielformular, von dem aus Sie die unterschiedlichen Aktionen ausführen und Laufwerke, Verzeichnisse und Dateien anzeigen können.
Stellen Sie die Eigenschaften Bildlaufleisten, Datensatzmarkierer, Navigationsschaltflächen und Trennlinien auf den Wert Nein ein.
Erstellen Sie anschließend einige Steuerelemente auf dem neuen Formular und ordnen Sie diese wie in Bild 2 an. In Tabelle 1 finden Sie eine Liste der Steuerelemente mit ihren Namen und Funktionen.
Das Kombinationsfeld cboLaufwerke soll alle Laufwerke des Filesystems anzeigen. Da es somit nicht an eine bestimmte Datenherkunft gebunden ist, sondern erst mit den gewünschten Werten gefüllt wird, müssen Sie den Wert der Eigenschaft Herkunftsart von Tabelle/Abfrage auf Wertliste ändern.
Steuerelement |
Funktion |
cboLaufwerke |
Auswahl des gewünschten Laufwerks |
txtVerzeichnis |
Anzeige des aktuellen Verzeichnisses |
cmdNeuerOrdner |
Schaltfläche zum Anlegen eines neuen Ordners |
cmdLoeschen |
Schaltfläche zum Löschen des ausgewählten Objekts aus lstOrdner oder lstDateien |
cmdEinfuegen |
Schaltfläche zum Einfügen der mit cmdKopieren oder cmdAusschneiden markierten Datei |
cmdKopieren |
Schaltfläche zur Auswahl einer zu kopierenden Datei |
cmdAusschneiden |
Schaltfläche zur Auswahl einer auszuschneidenden Datei |
lstOrdner |
Liste der Ordner, die sich in dem Verzeichnis in txtVerzeichnis befinden |
lstDateien |
Liste der Dateien, die sich in dem Verzeichnis in txtVerzeichnis befinden |
lblVerzeichnisse, lblDateien, lblGroesse, lblAenderungsdatum |
Beschriftungsfelder, die bei Doppelklick einen Sortiervorgang auslösen |
txtSortVerzeichnisname, txtSortDateiname, txtSortGroesse, txtSortAenderung |
Versteckte Textfelder zum Speichern der aktuellen Sortierung der Listenspalten |
txtAktion |
Verstecktes Textfeld zum Speichern der auszuführenden Aktion, also Kopieren oder Ausschneiden |
txtMarkiert |
Verstecktes Textfeld zum Speichern ausgewählter Dateien/Ordner |
txtSortierfeld |
Verstecktes Textfeld zum Speichern der zu sortierenden Listenspalte |
txtTyp |
Verstecktes Textfeld zum Festlegen, ob Datei oder Verzeichnis ausgewählt ist |
Tab. 1: Steuerelemente des Formulars frmDateimanager
Um das Kombinationsfeld mit den nötigen Daten zu füllen, benötigen Sie eine Prozedur, die beim öffnen des Formulars ausgelöst wird.
Die Prozedur (s. Quellcode 1) deklariert zunächst die Objektvariablen für das FileSystemObject namens objFSO und für ein Drive-Objekt namens objDrive sowie die Zeichenkette, die zum Zusammenstellen der Wertliste verwendet wird.
Anschließend wird die FileSystemObject-Objektvariable initiiert. In einer For Each-Schleife werden alle Laufwerke des FileSystemObjects durchlaufen und die Laufwerksbuchstaben mit Hilfe der Eigenschaft DriveLetter ermittelt und an die String-Variable strLaufwerke angehängt.
Für das Diskettenlaufwerk hängt die Anweisung beispielsweise den Ausdruck ;a;a: an die Zeichenkette strLaufwerke an. Nach dem späteren Abschneiden des führenden Semikolons bliebe also a;a: über.
Die zweimalige Verwendung der Eigenschaft DriveLetter und damit des Laufwerkbuchstabens erfolgt nicht zufällig: Der Buchstabe soll einmal unsichtbar als Wert der gebundenen Spalte und einmal als Ausgabewert sichtbar im Kombinationsfeld untergebracht werden. Den Grund für die Verwendung des Laufwerkbuchstabens als Wert der gebundenen Spalte erfahren Sie weiter unten.
Die nachfolgende Anweisung fügt zusätzlich für jedes Laufwerk die Art des Datenträgers an die Zeichenkette an. Anschließend wird der Inhalt der String-Variablen dem Kombinationsfeld zugewiesen. Damit das gefüllte Kombinationsfeld beispielsweise wie in Bild 3 aussieht, müssen Sie die erste Spalte, die den gebundenen Wert enthält, aus- und die zweite Spalte einblenden. Dazu ändern Sie die Werte der Eigenschaften Spaltenanzahl auf 2 und Spaltenbreiten auf 0cm;3cm ab.
Natürlich können Sie die Anzeige noch ein wenig verfeinern – z. B. durch die Ausgabe des Datenträgernamens, des freien und des gesamt verfügbaren Speicherplatzes, des Filesystems (NTFS, Fat usw.) und anderer Eigenschaften.
Für das Auslesen dieser Eigenschaften ist die Kenntnis des Laufwerktyps erforderlich, da verschiedene Eigenschaften nur für manche Laufwerktypen zur Verfügung stehen. So können Sie beispielsweise nicht das Filesystem eines Netzlaufwerkes ermitteln.
Tabelle 2 enthält eine Auflistung der gängigsten Laufwerktypen und deren Konstanten.
Zu jedem Laufwerk gibt es unterschiedliche Arten von Informationen – für eine lokale Festplatte gibt z. B. die Eigenschaft VolumeName, für ein Netzlaufwerk die Eigenschaft ShareName die Bezeichnung des Laufwerks an.
Private Sub Form_Load() Dim objFSO As Scripting.FileSystemObject Dim objLaufwerk As Scripting.Drive Dim strLaufwerke As String Set objFSO = New FileSystemObject On Error Resume Next For Each objLaufwerk In objFSO.Drives strLaufwerke = strLaufwerke & ";" & _ objLaufwerk.DriveLetter & ";" & _ objLaufwerk.DriveLetter & ":" strLaufwerke = strLaufwerke & _ Choose(objLaufwerk.DriveType + 1, _ "Unbekannt", "Diskettenlaufwerk", _ "Lokale Festplatte", "Netzlaufwerke", _ "CD-Laufwerke u.ä.", "Ram-Disk") Next Me.cboLaufwerke.RowSource = Mid(strLaufwerke, 2, _ Len(strLaufwerke) - 1) Me.txtVerzeichnis = "c:\" Me.cboLaufwerke.Value = "c" Me.lstOrdner.SetFocus End Sub
Quellcode 1
Bild 3: Auswahl eines Laufwerks per Kombinationsfeld
Laufwerktyp |
Konstante(Wert) |
Unbekannt |
Unknown (0) |
Diskettenlaufwerk |
Removable (1) |
Lokale Festplatte |
Fixed (2) |
Netzlaufwerk |
Remote (3 ) |
CD-Laufwerk u. ä. |
CDRom (4) |
Ram-Disk |
RamDisk (5) |
Tab. 2: Laufwerktypen und deren Konstanten
Bild 4: Anzeige von Laufwerksinformationen
Die unterschiedlichen Eigenschaften sollen in dafür vorgesehenen Textfeldern dargestellt werden (siehe Bild 4). Da die Zuweisung der Eigenschaften zu den Textfeldern relativ trivial ist, wird sie an dieser Stelle nicht genauer beschrieben.
Ein Laufwerk kann Ordner und/oder Dateien enthalten. In den Ordnern können sich weitere Unterordner und/oder Dateien befinden. ähnlich wie im Windows Explorer sollen nun zwei Fenster verwendet werden. Das linke Fenster enthält alle des im Textfeld txtVerzeichnisse angegebenen Verzeichnisses enthaltene Ordner. Das rechte Fenster soll alle Dateien des im Textfeldes txtVerzeichnisse angegebenen Ordners anzeigen.
Hinweis
Die Ansicht von Verzeichnissen und Dateien ist eine perfekte Anwendung für das Treeview-Control, das Sie in der vorherigen Ausgabe von Access im Unternehmen kennen gelernt haben. Da allerdings nicht jeder Leser im Besitz dieses Steuerelements ist, finden Sie hier eine Lösung, die zwar nicht so komfortabel ist, aber keine weiteren Steuerelemente benötigt.
Verzeichnisse anzeigen
Die Anzeige der Verzeichnisse ist nicht unbedingt trivial, da es unterschiedliche Möglichkeiten gibt.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo