IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Visual Basic - Einführung in die Arbeit mit den FSO (VB)



Einführung in die Arbeit mit den FSO (VB)

Dieser Artikel zeigt, wie Sie die FSO in Verbindung mit Visual Basic einsetzen, um einfach auf die Funktionen der Objekte Folder und File zuzugreifen. Hierbei wird insbesondere auch auf die Zusammenarbeit dieser Objekte eingegangen.


Autor: Tobias Surmann (incsoft)
Datum: 18-07-2003, 09:59:12
Referenzen: keine
Schwierigkeit: Profis
Ansichten: 46514x
Rating: 9.75 (4x bewertet)

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:

'Deklaration des FSO
Public FSO As New FileSystemObject
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.


'Existiert der Ordner C:\Programme\MeinProgramm?
Dim bEx As Boolean

bEx = FSO.FolderExists("C:\Programme\MeinProgramm")

If bEx Then
	MsgBox "Der Ordner existiert."
Else
	MsgBox "Der Ordner existiert nicht."
End If
Erstellen eines neuen Ordners

Soll 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.


'Wenn Ordner schon existiert, dann nicht neu erstellen
If FSO.FolderExists("C:\Eigene Dateien\Projekte") = False Then
	
	'Ordner soll erstellt werden
	If FSO.CreateFolder("C:\Eigene Dateien\Projekte") = False 
Then
		
		'Ordner wurde erfolgreich erstellt
		MsgBox "Es wurde ein neuer Ordner erstellt!"

	Else

		MsgBox "Bei Erstellung des Ordners ist ein Fehler aufgetreten."
		End 'Ausführung des Programms abbrechen

	End If

End If
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 umbenennen
FSO.MoveFolder "C:\InternetTemp", "C:\Downloads"
Ordner kopieren

Immer 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.

'Kompletten Inhalt des Ordners C:\Eigene Dateien nach D:\Backup sichern
FSO.CopyFolder "C:\Eigene Dateien", "D:\Backup", True
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.

Public Sub CopyFolderVB(quelle As String, ziel As String)

	Dim c As Long
	Dim i As Long
	Dim arrFolders() As String
	Dim FolderName As String

	On Error Resume Next

	If Right(quelle, 1) <> "\" Then quelle = quelle & "\"
	If Right(ziel, 1) <> "\" Then ziel = ziel & "\"
	FolderName = Dir(quelle & "*.*", 30)

	Do While Len(FolderName) > 0

		If FolderName <> "." And FolderName <> ".." Then

			If (GetAttr(quelle & FolderName) And 16) = 16 Then

				MkDir ziel & FolderName
				Redim Preserve arrFolders(c)
				c = c + 1
				arrFolders(c) = FolderName

			Else

				DoEvents
				FileCopy quelle & FolderName, ziel & FolderName

			End If

		End If

		FolderName = Dir 'Nächstes Verzeichnis

	Loop

	For i = 1 To c
		DoEvents
		CopyFolderVB quelle & arrFolders(i), ziel & arrFolders(i)
	Next i

End Sub
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 C:\Sonstiges
'Unterordner C:\Sonstiges\Unwichtiges
'Unterordner C:\Sonstiges\Wichtiges - schreibgeschützt
'Alle unwichtigen Dateien und Ordner löschen
FSO.DeleteFolder "C:\Sonstiges", False

Ordner verschieben

Wie 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).

'Ordner verschieben (funktioniert nur innerhalb eines Laufwerks!)
FSO.MoveFolder "C:\Downloads", "C:\Sonstiges\Downloads"
FSO.MoveFolder "C:\Eigene Dateien", "D:\BackUp" 'Fehler!
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.


Public Sub MoveFolderFSO(quelle As String, ziel As String)

	'erst den Ordner kopieren
	FSO.CopyFolder quelle, ziel, True
	
	'und den Quellordner danach löschen
	FSO.DeleteFolder quelle, True

End Sub
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.


'Ordner-Objekt erzeugen
Dim f As Folder
Set f = FSO.GetFolder("C:\")

Ü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.


'Alle Unterordner von C:\ auflisten
Dim f As Folder

For Each f In FSO.GetFolder("C:\").SubFolders
	lstUnterOrdner.AddItem f
Next
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.


'Anzahl Unterordner in C:\
'f ist ein gültiges Folder-Objekt das auf C:\ verweist

MsgBox "Anzahl: " & CStr(f.SubFolders.Count)
Attribute eines Ordners

Die 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:

AttributWertBeschreibung
Archive&H20Archiv
Compressed&H800Komprimiert
Directory&H10Verzeichnis
Hidden2Versteckt
ReadOnly1Schreibgeschützt
System4Systemordner


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:


'Ist C:\Windows\System ein Systemordner?
Dim f As Folder

Set f = FSO.GetFolder("C:\Windows\System")

If f.Attributes And System Then
	MsgBox "Dies ist ein Systemordner!"
Else
	MsgBox "Dies ist kein Systemordner!"
End If
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.


'C:\Downloads soll schreibgeschützt werden
Dim f As Folder

Set f = FSO.GetFolder("C:\Downloads")

f.Attributes = f.Attributes Or ReadOnly
Datum der Erstellung, Änderung und des letzten Zugriffs

Das 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.


'Daten des Ordners C:\Windows ausgeben
Dim f As Folder

Set f = FSO.GetFolder("C:\Windows")

MsgBox "Ordner erstellt am: " & CStr(f.DateCreated) & vbCrLf & _
"Letzter Zugriff am: " & CStr(f.DateLastAccessed) & vbCrLf & _
"Letzte Änderung am: " & CStr(f.DateLastModified)
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.


'Ordnertyp von C:\Windows\Tasks
Dim f As Folder

Set f = FSO.GetFolder("C:\Windows\Tasks")

MsgBox "Typ: " & f.Type 'Ausgabe: "Geplante Tasks"
Ordnergröße

Die 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.


'f ist ein gültiges Folder-Objekt
Dim bytes As Long
On Error Goto Err_h

bytes = f.Size

MsgBox "Ordnergröße: " & CStr(bytes) & " Bytes"
Exit Sub

Err_h:
MsgBox "Fehler"
Laufwerksbuchstabe ermitteln

Möchten Sie wissen, auf welchem Laufwerk ein Ordner gespeichert ist, setzen Sie die Eigenschaft Drive ein.

'f ist ein gültiges Folder-Objekt
MsgBox f.Drive
Vollständiger Pfad des Ordners ermitteln

Auch 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.

'f ist ein gültiges Folder-Objekt
MsgBox f.Path
Pfad und Name im DOS-Format

In 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.

'C:\Eigene Dateien\Eigene Musik im DOS-Format (8.3) zurückgeben
Dim f As Folder

Set f = FSO.GetFolder("C:\Eigene Dateien\Eigene Musik")

'Kurzer Ordnername
MsgBox f.ShortName 'Ausgabe: "Eigene~2"

'Kompletter Pfad (kurz)
MsgBox f.ShortPath 'Ausgabe: "C:\Eigene~1\Eigene~2"
Zugriff auf übergeordneten Ordner

Auch 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.

'f ist ein gültiges Folder-Objekt
If f.IsRootFolder = False Then

	MsgBox "Übergeordneter Ordner: " & f.ParentFolder

End If
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.

'Prüfen ob config.sys existiert
If FSO.FileExists("C:\config.sys") Then

	MsgBox "config.sys existiert"

Else

	MsgBox "config.sys existiert nicht"

End If
Datei umbenennen

Auch das Umbenennen einer Datei funktioniert ähnlich wie bei Ordnern, nur das die hierfür zuständige Methode des FSO-Objekts MoveFile heißt.

'bmp01.$$$ in foto.bmp umbenennen
FSO.MoveFile "C:\bmp01.$$$", "C:\foto.bmp"
Datei kopieren

Das 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).

'Datei kopieren mit VB-Funktion (auch wenn es bereits eine Datei notizen.txt in C:\ gibt)
FileCopy "C:\Backup\notizen.txt", "C:\notizen.txt"

'Datei kopieren mit FSO-Funktion (wird nur durchgeführt, falls es noch keine
Datei notizen.txt in C:\ gibt) FSO.CopyFile "C:\Backup\notizen.txt", "C:\", 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.


'falsch!
FSO.CopyFile "C:\notizen.txt", "C:\Backup"

'richtig
FSO.CopyFile "C:\notizen.txt", "C:\Backup\"
Datei löschen

Mit 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.

'C:\autoexec.bat löschen falls sie nicht schreibgeschützt ist
FSO.DeleteFile "C:\autoexec.bat", False
Datei verschieben

Das 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.

'Datei foto.bmp von C:\Eigene Dateien\Eigene Bilder nach C:\Fotoalbum verschieben
FSO.MoveFile "C:\Eigene Dateien\Eigene Bilder\foto.bmp", "C:\Fotoalbum\foto.bmp"

'Die Datei kann auch gleichzeitig umbenannt werden
FSO.MoveFile "C:\Eigene Dateien\Eigene Bilder\foto.bmp", "C:\Fotoalbum\Geburtstag.bmp"
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:

Public Sub MoveFileFSO(quelle As String, ziel As String)

	'erst die Datei kopieren
	FSO.CopyFile quelle, ziel
	'dann Quelldatei löschen
	FSO.DeleteFile quelle, True

End Sub
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.

'Ordner-Objekt erzeugen
Dim f As Folder
Dim fi As File

Set f = FSO.GetFolder("C:\")
Set fi = f.Files("config.sys")
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.

EigenschaftBeschreibung
AttributesEigenschaft die es erlaubt Dateiattribut-Flags festzulegen bzw. auszulesen


AttributWertBeschreibung
Archive&H20Archiv
Compressed&H800Komprimiert
Directory&H10Verzeichnis
Hidden2Versteckt
ReadOnly1Schreibgeschützt
System4Systemordner


DateCreated Erstellungsdatum der Datei
DateLastAccessed Datum des letzten Zugriffs auf die Datei
DateLastModified Datum der letzten Änderung an der Datei
Drive Laufwerk auf dem die Datei gespeichert ist
Name Name der Datei (ohne Pfad)
ParentFolder Gibt den Ordnernamen zurück, in dem sich die Datei befindet
Path Vollständiger Pfad zur Datei
ShortName Name im DOS-Format (8.3)
ShortPath Pfad zur Datei im DOS-Format (8.3)
Size Größe der Datei in Bytes
Type Dateityp (z. B. "Microsoft Word-Dokument" für eine doc-Datei)


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.

'f ist ein gültiges Folder-Objekt
MsgBox "Anzahl der Dateien im Ordner: " & CStr(f.Files.Count)

Auflistung aller Dateien in einem Ordner

Das 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.

Dim f As Folder
Dim fi As File

'Verweis auf Ordner erstellen
Set f = FSO.GetFolder("C:\Downloads")

'Alle heruntergeladenen Dateien auflisten
For Each fi In f.Files
	lstFiles.AddItem fi
Next

Dateifilter

Komplizierter 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).

Dim f As Folder
Dim fi As File
Dim strExt As String

'Verweis auf Ordner erstellen
Set f = FSO.GetFolder("C:\Downloads")

'Alle heruntergeladenen Dateien auflisten
For Each fi In f.Files

	strExt = FSO.GetExtensionName(fi) 'Extension der Datei ermitteln

	If strExt = "MP3" Or strExt = "WAV" Then

		lstFiles.AddItem fi

	End If

Next

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:
    Allgemein
  • welchen Zweck die FSO erfüllen
  • wie die FSO aufgebaut sind
  • wie die FSO in die Entwicklungsumgebung eingefügt werden
    Ordner
  • die Existenz eines Ordners zu prüfen
  • einen neuen Ordner zu erstellen
  • einen Ordner umzubenennen
  • einen Ordner (inkl. Inhalt) zu kopieren
  • einen Ordner (inkl. Inhalt) zu löschen
  • einen Ordner (inkl. Inhalt) zu verschieben
  • Folder-Objekten einen Verweis auf einen Ordner zuzuweisen
  • alle Unterordner eines bestimmten Ordners aufzulisten
  • die Anzahl der in einem Ordner enthaltenen Dateien zu ermitteln
  • Attribute eines Ordners zu lesen und zu setzen
  • das Datum der Erstellung, Änderung und des letzten Zugriffs auf einen Ordner auszulesen
  • Ordnertyp und Ordnergröße zu ermitteln
  • den Laufwerksnamen aus dem Verzeichnispfad auszulesen
  • den vollständigen Pfad des Ordners festzustellen
  • den Verzeichnispfad und den Ordnernamen im DOS-Format 8.3 auszugeben
  • Zugriff auf den übergeordneten Ordner eines Ordners herzustellen
  • festzustellen, ob es sich bei einem Ordner um den Root-Ordner handelt
    Dateien
  • die Existenz einer Datei zu prüfen
  • eine Datei umzubenennen
  • eine Datei zu kopieren
  • eine Datei zu löschen
  • eine Datei zu verschieben
  • File-Objekten einen Verweis auf eine Datei zuzuweisen
  • Attribute einer Datei zu lesen und zu setzen
  • das Datum der Erstellung, Änderung und des letzten Zugriffs auf eine Datei auszulesen
  • Dateityp und Dateigröße zu ermitteln
  • den Laufwerksnamen auf dem die Datei gespeichert ist auszulesen
  • den vollständigen Pfad zu einer Datei festzustellen
  • den Pfad und den Namen einer Datei im DOS-Format 8.3 auszugeben
    Zusammenarbeit von Folder- und File-Objekten
  • die Anzahl der in einem Ordner enthaltenen Dateien zu ermitteln
  • alle Dateien, die sich in einem bestimmten Ordner befinden aufzulisten
  • die Auflistung aller Dateien nach Dateiextensionen zu filtern
Im nächsten Teil dieser Artikelserie geht es um die Objekte Drive (Laufwerk) und TextStream (Textdatei). Außerdem wird die Behandlung von Spezialordnern und -dateien (z.B. Erzeugung von temporären Dateien) gezeigt. Der letzte Teil der "Trilogie" wird sich ausgiebig dem Vergleich zwischen Dictionary- (Teil der FSO) und dem Collection-Objekt von VB widmen.


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04506
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06243
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1142
Comments: 0