|
Home - Programmieren - Visual Basic - Einführung in die Arbeit mit den FSO (VB)
Hinweis: Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich. Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren. [Druckansicht] [Als E-Mail senden] [Kommentar verfassen] Einleitung FSO ist die Abkürzung für File System Objects. Diese Objektklassen können Sie in Visual Basic integrieren, um einfach auf Funktionen zum Lesen und Schreiben von Textdateien und auf die verschiedenen Objekte des Dateisystems zuzugreifen. Sie eignen sich nicht nur hervorragend zur Ermittlung von Datenträger-, Ordner- oder Datei-Eigenschaften, sie sind auch in der Lage, dem Entwickler vielseitige Möglichkeiten zum Erstellen, Umbenennen, Verschieben, Kopieren u.v.m. zu geben. Dieser Artikel zeigt Ihnen anhand von kurzen Beispielcodes, wie die Objekte Folder und File funktionieren, die die FSO bereitstellen. Hierbei wird insbesondere auch auf die Zusammenarbeit dieser Objekte eingegangen. Aufbau Zunächst wollen wir uns einen Einblick in den Aufbau der File System Objects verschaffen. Das folgende Diagramm zeigt den Aufbau der FSO und die Objekte, die im Rahmen dieser Artikelserie behandelt werden. Das oberste Objekt nennt sich FileSystemObject über welches die weiteren Objekte Drive (Laufwerk), Folder (Ordner), File (Datei) und TextStream (Textdatei) erzeugt werden können. Einen besonderen Standpunkt nimmt das Objekt Dictionary ein, welches ähnlich wie eine Collection funktioniert. Da dieses nichts mit dem eigentlichen Zweck der FSO - die Bereitstellung von Funktionen zur Dateisystemverwaltung - zu tun hat, verzichte ich auf dessen Darstellung im nun folgenden Diagramm. ![]() Es ist ratsam das oberste Objekt (FileSystemObject) in Ihrem Projekt für alle Prozeduren und Funktionen öffentlich zugänglich zu machen. Dies erreichen Sie durch Hinzufügen eines neuen Moduls und der Deklaration des Objekts mit dem Zugriffsmodifizierer Public:
Bevor es nun mit der eigentlichen Programmierung losgehen kann, fehlt nur noch die Integration der FSO in Ihr Projekt.FSO in der Entwicklungsumgebung verfügbar machen Um die FSO in der IDE von VB verfügbar zu machen, müssen diese zunächst über einen Verweis eingebunden werden, da sie nicht integraler Bestandteil der Programmiersprache Visual Basic sind und nur als externe DLL vorliegen. Klicken Sie auf Projekt | Verweise… und markieren Sie im nun folgenden Fenster in der Liste den Eintrag Microsoft Scripting Runtime. In dem Kasten unter der Liste finden Sie den Hinweis, dass die FSO-Bibliothek in der Datei scrrun.dll enthalten ist. Möchten Sie Ihre Anwendung später über das Internet oder auf CD verteilen, muss diese Datei mit in das Setup-Paket eingebunden werden, damit ihr Programm auf den Computern der Endbenutzer läuft. ![]() Klicken Sie auf OK um den Dialog zu schließen. Der Verweis wird nun automatisch von VB berücksichtigt und die Programmierung mit den FSO kann nun endlich losgehen. Ordner Das Folder-Objekt bietet dem Programmierer den Zugriff auf alle Ordner und Unterordner des Dateisystems. Außerdem stellt es viele häufig benötigte Funktionen zur Verwaltung und allgemein zum Arbeiten mit Verzeichnissen zur Verfügung. Existenz eines Ordners prüfen Die Methode FolderExists wird direkt vom übergeordneten FSO-Objekt angeboten. Sie erwartet den kompletten Pfad zu dem auf Existenz zu überprüfenden Ordner. Als Ergebnis gibt die Funktion einen booleschen Wert zurück; True, wenn der Ordner existiert, False, wenn nicht.
Erstellen eines neuen OrdnersSoll ein neuer Ordner erstellt werden, so wird die CreateFolder-Methode des FSO-Objekts benötigt. Diese erwartet als einzigen Parameter den Pfad zum zu erstellenden Ordner. Hierbei ist zu beachten, dass mit dieser Methode keine mehrstufigen Verzeichnisse erstellt werden können. Daher müssen Sie diese weiterhin - angefangen bei der obersten Ebene - für jede Verzeichnisebene einzeln erstellen. Die Methode gibt bei erfolgreicher Erstellung des neuen Verzeichnisses True zurück, ansonsten False.
An dieser Stelle ist sichergestellt, dass der Ordner C:\Eigene Dateien\Projekte existiert. Falls ein Fehler bei der Erstellung aufgetreten ist, wurde das Programm bereits beendet.Ordner umbenennen Sie können einen Ordner über die Methode MoveFolder umbenennen. Diese Methode ist eigentlich zum Verschieben eines Ordners gedacht, wird diesem Anspruch aber aufgrund der im entsprechenden Abschnitt (s. Ordner verschieben) beschriebenen Probleme nicht ganz gerecht. Man kann diese Methode aber exzellent zum Umbenennen eines Ordners verwenden, da der alte Ordner gelöscht und ein Neuer mit anderem Namen erstellt werden kann. Sehen Sie sich dazu das folgende Beispiel an.
Ordner kopierenImmer wieder tritt beim Programmieren mit Visual Basic die Problemstellung auf, dass ein Ordner mit allen enthaltenen Dateien und Unterordnern kopiert werden soll. Anstatt hier eine eigene rekursive und meist auch fehleranfällige Funktion zu schreiben, bindet man einfach die FSO in das aktuelle Projekt ein und lässt die CopyFolder-Methode die Arbeit für sich erledigen. Der erste Parameter der Methode erwartet den Quellordner, der zweite Parameter bestimmt, wohin der Quellordner kopiert werden soll. Mit einem optionalen dritten Argument kann man steuern, ob evtl. im Zielordner vorhandene Ordner bzw. Dateien überschrieben werden dürfen. True steht hierbei für Überschreiben, bei Angabe von False ist das Überschreiben von Dateien verboten.
Zum Vergleich hier eine rekursive Funktion, die gänzlich in "konventionellem" VB (d. h. ohne weitere Hilfsbibliotheken) geschrieben ist und die die gleiche Wirkung erzielt wie 1(!) Codezeile bei Verwendung der FSO.
Auch wenn diese Funktion relativ lang ist zeigt sie doch umso imposanter,welche Vereinfachung uns die FSO bei der Umsetzung des Zugriffs auf Dateisystemfunktionen bieten. Ordner löschen Auch die DeleteFolder-Methode des FSO-Objekts verfügt über die Fähigkeit alle Dateien und Unterordner innerhalb des zu löschenden Ordners gleich mit zu löschen. Der erste Parameter ist somit der Pfad des zu löschenden Ordners, ein zweiter Parameter gibt an, ob auch schreibgeschützte Ordner und Dateien gelöscht werden sollen (True).
Ordner verschiebenWie schon im Abschnitt Ordner umbenennen beschrieben ist eigentlich die MoveFolder-Methode des FSO-Objekts für das Verschieben eines Ordners zuständig. Allerdings funktioniert dies nicht, wenn sich das Ziel auf einem anderen Laufwerk befindet wie die Quelle. Damit ist diese Funktion nur zu gebrauchen, wenn Sie Ordner innerhalb eines Laufwerks verschieben möchten. Außerdem muss der Zielordner bereits existieren. Ein positiver Aspekt an dieser Funktion ist jedoch, dass man einen Ordner gleichzeitig verschieben und umbenennen kann (was wir uns ja bereits zunutze gemacht haben).
Um die unangenehmen Einschränkungen der MoveFolder-Methode zu umgehen, schreiben wir uns kurzerhand selbst eine Funktion, welche wiederum auf die uns bereits bekannten Funktionen CopyFolder und DeleteFolder zurückgreift.
Nehmen Sie diese Prozedur am besten gleich mit in das Modul auf, indem auch schon das FSO-Objekte deklariert ist.Das Folder-Objekt Bis jetzt haben wir alle Funktionen, die wir für die Arbeit mit Ordnern benötigen über Methoden des übergeordneten FSO-Objekts realisiert. Dieser Abschnitt zeigt, wie Sie ein Folder-Objekt erzeugen und diesem einen Ordner innerhalb des Dateisystems zuweisen.
Über die GetFolder-Methode des FSO-Objekts wird f ein gültiger Verweis auf den Ordner C:\ zugewiesen.Auflisten aller Unterordner Da wir nun wissen, wie wir ein Folder-Objekt erzeugen und ihm einen bestimmten Ordner im Dateisystem zuweisen können, haben wir nun verschiedene Möglichkeiten die in diesem Objekt enthaltenen Informationen zu nutzen. Da f ein Objekt ist, können wir es in Verbindung mit einer For … Each-Schleife optimal nutzen, um heraus zu finden, welche Unterordner sich in einem bestimmten Ordner befinden.
Die Standardeigenschaft des Folder-Objekts ist Name. Daher werden bei Ausführung des obigen Codes alle Verzeichnisnamen in der Liste ausgegeben.Anzahl der Unterordner ermitteln Die Anzahl der Unterordner zu ermitteln ist nun auch kein Problem mehr. Dies geschieht über die Count-Eigenschaft von SubFolders.
Attribute eines OrdnersDie Attributes-Eigenschaft des Folder-Objekts gibt Auskunft über die aus dem Windows-Ordnereigenschaften-Dialog bekannten Attribute wie schreibgeschützt, versteckt, Archiv, System, komprimiert etc. Hier zunächst eine Tabelle mit den wichtigsten Attributen:
All diese Konstanten sind Mitglieder der FSO-Enumeration FileAttributes. Über das Attribut Directory kann man auslesen, ob es sich bei einer "Datei" um einen Ordner handelt. Deshalb gibt es für Ordner keine extra Enumeration, da alle Eigenschaften auf beides - Ordner und Dateien - angewendet werden können. Um auszulesen, ob ein bestimmtes Attribut gesetzt ist oder nicht, kann folgender Code verwendet werden:
Hier muss bitweise ein Vergleich über den And-Operator zwischen der Konstante System und f.Attributes durchgeführt werden, um herauszufinden, ob dieses Flag in Attributes gesetzt ist. Für das Setzen eines Attributes wird hingegen Or eingesetzt.
Datum der Erstellung, Änderung und des letzten ZugriffsDas Folder-Objekt stellt uns drei Eigenschaften zum Ermitteln des Erstellungsdatums, der letzten Änderung und des letzten Zugriffs zur Verfügung. Diese geben das entsprechende Datum als Datentyp Date zurück.
OrdnertypÜber die Eigenschaft Type des Folder-Objekts wird der Typ des Ordners zurückgeliefert. Die meisten Ordner sind einfache Dateiordner. Es gibt aber auch verschiedene Spezial-Ordner (z. B. Eigene Dateien etc.) für die diese Eigenschaft interessant sein dürfte.
OrdnergrößeDie Größe eines Ordners mit VB herauszufinden ist nicht sonderlich schwer. Man muss nur alle Dateien innerhalb des Ordners auflisten und die jeweiligen Dateigrößen addieren. Komplizierter wird es, wenn auch alle Unterordner mit ihren jeweiligen Dateien in das Ergebnis mit eingehen sollen. Hier hilft die Size-Eigenschaft des Folder-Objekts, die automatisch die Größe eines Ordners inkl. aller Dateien und Unterordner in Bytes zurückgibt. Da einige Ordner gegen eine solche Abfrage geschützt sein könnten, muss hier noch eine entsprechende Fehlerbehandlung erfolgen.
Laufwerksbuchstabe ermittelnMöchten Sie wissen, auf welchem Laufwerk ein Ordner gespeichert ist, setzen Sie die Eigenschaft Drive ein.
Vollständiger Pfad des Ordners ermittelnAuch dies ist recht einfach. Ein Folder-Objekt besitzt nämlich nicht nur die Eigenschaft Name (Standardeigenschaft) in der der (wie könnte es auch anders sein?) Name des Ordners gespeichert ist, es gibt auch eine Eigenschaft Path, die den vollständigen Pfad zum Ordner als String zurückgibt.
Pfad und Name im DOS-FormatIn einigen Situationen benötigt man den Pfad oder den Ordnernamen im DOS-Format. Hierbei werden für einen Verzeichnisnamen 8 Buchstaben verwendet, während ein Dateiname 8 Buchstaben für den Namen und 3 Buchstaben für die Extension erhalten kann. Längere Namen werden durch Tilden (~) und Anhängen einer Nummer gekürzt.
Zugriff auf übergeordneten OrdnerAuch der Zugriff auf den übergeordneten Ordner ist mit den FSO kein Problem. Hierbei muss man nur aufpassen, dass man nicht versehentlich versucht von z. B. C:\ (also einem Root-Ordner) auf den übergeordneten Ordner zuzugreifen. Der folgende Code berücksichtigt dies.
ParentFolder ist selbst wieder ein Objekt vom Typ Folder.Dateien Die Funktionen, die das FSO-Objekt für Dateien bereitstellt gleichen denen für Ordner sehr stark. Auch hier können Sie natürlich Dateien umbenennen, verschieben, kopieren etc. Ich fasse mich in diesem Teil dieses Artikels bewusst kürzer, da das Wesentliche zu den Funktionen bereits im Abschnitt Ordner gesagt wurde. Existenz einer Datei prüfen Um die Existenz einer Datei zu prüfen, wird die FileExists-Methode des FSO-Objekts aufgerufen und der komplette Pfad & Dateiname zur entsprechenden Datei als Parameter übergeben. Die Rückgabe ist ein boolescher Wert, der Aufschluss darüber gibt, ob die Datei schon existiert oder nicht.
Datei umbenennenAuch das Umbenennen einer Datei funktioniert ähnlich wie bei Ordnern, nur das die hierfür zuständige Methode des FSO-Objekts MoveFile heißt.
Datei kopierenDas Kopieren einer Datei erfolgt über die Funktion CopyFile. Nun könnte man anführen, dass diese überflüssig sei, da es in VB bereits eine Funktion FileCopy gibt, die die gleiche Funktionalität zur Verfügung stellt, allerdings besitzt CopyFile im Gegensatz zu FileCopy noch einen dritten Parameter (vom Typ Boolean) über den sich einstellen lässt, ob eine schon vorhandene Zieldatei überschrieben werden soll (True) oder nicht (False).
Bei CopyFile muss nur das Zielverzeichnis als zweiter Parameter angegeben werden. Hierbei müssen Sie unbedingt darauf achten, dass Sie dem Zielordner einen Backslash anhängen, da sonst ein Laufzeitfehler ausgelöst wird.
Datei löschenMit DeleteFile kann eine Datei gelöscht werden. Als ersten Parameter muss der Funktion der komplette Pfad zur Datei und der Dateiname übergeben werden. Der zweite Parameter ist vom Datentyp Boolean und gibt an, ob auch schreibgeschützte Dateien gelöscht werden sollen (True). Falls dies nicht erwünscht ist, muss hier False übergeben werden.
Datei verschiebenDas Verschieben einer Datei erfolgt wie auch das Umbenennen über MoveFile. Diese Funktion unterliegt den gleichen Einschränkungen wie MoveFolder. Auch hier gibt es keine Möglichkeit eine Datei auf ein anderes Laufwerk zu übertragen.
Um die Einschränkungen dieser Funktion zu umgehen, kann man sich selbst schnell eine solche Funktion schreiben, indem man auf CopyFile und DeleteFile zurückgreift und zunächst die Quelldatei an das Ziel kopiert und danach die Quelldatei löscht. Folgender Code zeigt wie das geht:
Das File-ObjektÜber die GetFolder-Methode des FSO-Objekts wird f ein gültiger Verweis auf den Ordner C:\ zugewiesen. Anschließend kann über die Files-Auflistung des Folder-Objekts ein File-Objekt erzeugt werden.
Da das File-Objekt die gleichen Eigenschaften (schreibgeschützt, versteckt etc.) wie das Folder-Objekt bereitstellt und diese bereits im vorigen Abschnitt besprochen wurden, möchte ich an dieser Stelle nicht alles wiederholen, sondern nur noch mal einen kurzen Überblick über die verschiedenen Eigenschaften geben.
Zusammenarbeit von File- und Folder-Objekten Bisher haben wir die Objekte File und Folder nur getrennt von einander betrachtet. Das volle Leistungspotenzial dieser beiden FSO-Objekte können Sie allerdings nur ausschöpfen, wenn Sie wissen, wie diese beiden Objekte zusammenarbeiten. Anzahl der in einem Ordner enthaltenen Dateien Die Anzahl der in einem bestimmten Ordner enthaltenen Dateien kann man über die Count-Eigenschaft der Files-Auflistung eines Folder-Objekts auslesen. Dies hört sich zunächst nach einem recht komplizierten Code an, man kann diese Aufgabe aber in einer Codezeile erledigen.
Auflistung aller Dateien in einem OrdnerDas Auflisten aller Dateien in einem Ordner ist eine Funktion die sehr häufig in VB-Programmen benötigt wird. Wenn man die FSO einsetzt ist diese Aufgabe schnell erledigt.
DateifilterKomplizierter wird es, wenn nicht alle Dateitypen eines Verzeichnisses gefragt sind. So könnte man in einem Programm z. B. nur an WAV- und MP3-Dateien interessiert sein. Um diese in einem Verzeichnis zu finden ist schon ein deutlich höherer Aufwand vonnöten (besonders wenn die Liste der erlaubten Dateiextensionen noch viel länger ist).
An dieser Stelle muss man leider selbst Hand anlegen und die gewünschten Dateitypen ausfiltern. Eine FSO-Funktion die diese Aufgabe für den Programmierer erledigt gibt es leider nicht.Zusammenfassung und Ausblick In diesem Artikel haben Sie gelernt:
|
Autoren:03760
Artikel:00815 Glossar:04618 News:08554 Userbeiträge:16077 Queueeinträge:00024
Unternehmensimage im Internet aufbauen
Hotels.com geht Offline DMSFACTORY erleichtert Implementierung von DMS über Skype [Mehr News]
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
|