Teil 2 unseres FSO-Workshops beschäftigt sich mit den Objekten des FSO: Drive-Object, Folder-Objekt und File-Objekt. Weiterhin stellen wir Ihnen noch ein paar zusätzliche FSO-Methoden vor und erläutern auch kurz interessante Hilfsfunktionen für die Analyse von Dateinamen. Das Drive-Objekt Benötigen Sie eine Liste aller derzeit verfügbaren Laufwerke? Kein Problem. Hierfür stellt Ihnen das FileSystemObject mit dem Drive-Objekt ein Objekt zur Verfügung, mit dem sich das spielend leicht realisieren lässt. Deklaration: ' im Allgemein-Teil der Form / des Moduls Dim oFSO As New FileSystemObject ' Auflisten aller verfügbaren Laufwerke Dim oDrive As Drive For Each oDrive In oFSO.Drives List1.AddItem oDrive Next Das Drive-Objekt stellt noch viele interessante Eigenschaften und Methoden zur Verfügung. Informationen eines bestimmten Laufwerks ermitteln ' Laufwerk C: Dim oDrive As Drive Set oDrive = oFSO.GetDrive("C:") Nun möchten wir zunächst wissen, ob das angegebene Laufwerk auch bereit ist, d.h. ob bei einem Diskettenlaufwerk eine Diskette eingelegt ist bzw. allgemein bei einem Wechselmedium, wie Zip-Laufwerk oder CD-Laufwerk ein Datenträger eingelegt ist. Anschließend ermitteln wir den Speicherplatz insgesamt, sowie den noch freien Speicherplatz: ' Laufwerk bereit? If oDrive.IsReady Then ' Kapazität, sowie noch verfügbaren Speicherplatz ' ermitteln und in KB anzeigen Dim nSize As Currency Dim nFree As Currency nSize = oDrive.TotalSize nFree = oDrive.AvailableSpace MsgBox "Kapazität (kb): " & FormatNumber(nSize / 1024, "0") & _ vbCrLf & "Noch frei (kb): " & FormatNumber(nFree / 1024, 0) Else MsgBox "Laufwerk nicht bereit!" End If Um was für einen Laufwerkstyp handelt es sich eigentlich und welches Dateisystem wird verwendet? Diese Fragen beantworten uns die Eigenschaften DriveType und FileSystem: ' Laufwerkstyp ermitteln und anzeigen Select Case oDrive.DriveType Case 0 ' Unknown MsgBox "Unbekannter Laufwerkstyp" Case 1 ' Removable MsgBox "Wechseldatenträger" Case 2 ' Fixed MsgBox "Festplatte" Case 3 ' Network MsgBox "Netzlaufwerk" Case 4 ' CDROM MsgBox "CD-Laufwerk" Case 5 ' RAM-Disk MsgBox "RAM-Disk" End Select ' Welches Dateisystem wird verwendet? (z.B. NTFS oder FAT32) MsgBox oDrive.FileSystem Pfad und Stammverzeichnis eines Laufwerks ermitteln: MsgBox "Pfad: " & oDrive.Root & vbCrLr & _ "Root: " & oDrive.RootFolder Die Path-Eigenschaft gibt immer das Stammlaufwerk ohne Backslash zurück, also C: - nicht C:\. RootFolder hingegen gibt das komplette Stammverzeichnis zurück - also C:\. Gleichzeitig repräsentiert RootFolder ein Folder-Objekt, das wie folgt zugewiesen werden kann: A' Folder-Objekt erstellen (Stammverzeichnis eines Laufwerks) Dim oFolder As Folder Set oFolder = oDrive.RootFolder Mehr zum Folder-Objekt im Anschluss an die Besprechung des Drive-Objekts. Handelt es sich bei einem Laufwerk um ein Netzlaufwerk, so lässt sich der Freigabename wie folgt ermitteln: ' Freigabename eines Netzlaufwerks anzeigen If oDrive.DriveType =3 Then MsgBox oDrive.ShareName End If Abschließend möchten wir noch die Datenträger-Bezeichnung (VolumeName), sowie dieSeriennummer des Laufwerks ermitteln. Und das geht so: ' Datenträgerbezeichnung MsgBox oDrive.VolumeName ' Seriennummer des Datenträgers MsgBox oDrive.SerialNumber Diese beiden Eigenschaften funktionieren auch bei Netzlaufwerken! Das Folder-Objekt Über das Folder-Objekt lassen sich u. a. sehr schnell alle Ordner eines Verzeichnisses ermitteln. Das FSO unterstützt hierbei sowohl lokale Verzeichnisse als auch Netzwerkverzeichnisse. Nachfolgend ein Beispiel, wie sich alle Ordner eines "Ausgangsverzeichnisses" in einer ListBox anzeigen lassen: Deklaration: ' im Allgemein-Teil der Form / des Moduls Dim oFSO As New FileSystemObject ' Auflisten aller Ordner im Laufwerk C: Dim oFolder As Folder For Each oFolder In oFSO.GetFolder("C:").SubFolders List1.AddItem oFolder Next Das Folder-Objekt stellt noch viele interessante Eigenschaften und Methoden zur Verfügung. So kann z.B. über die Files-Aufzählung die Anzahl der Dateien eines Ordners ermittelt werden: Dim oFolder As Folder ' Ausgangsverzeichnis Set oFolder = oFSO.GetFolder("c:") ' Anzahl Dateien im Stammverzeichnis von C: Dim nCount As Long nCount = oFolder.Files.Count MsgBox "Im Verzeichnis C:\ befinden sich " & CStr(nCount) & " Datei(en)." Wahrscheinlich ahnen Sie es jetzt schon: Über die Files-Aufzählung des Folder-Objekts lassen sich auch schnell alle Dateien eines Ordner ermitteln. Genau! Dim oFolder As Folder Dim oFile As File ' Ausgangsverzeichnis Set oFolder = oFSO.GetFolder("c:") ' alle Dateien im Stammverzeichnis C: anzeigen For Each oFile In oFolder.Files List1.AddItem oFile Next Informationen eines bestimmten Ordners ermitteln Ordner-Attribute lesen und setzen ' Folder-Objekt erstellen Dim oFolder As Folder Set oFolder = oFSO.GetFolder("d:\temp") ' Ordner-Attribute Dim nAttr As Long nAttr = oFolder.Attributes ' Schreibgeschützt? If nAttr And ReadOnly Then MsgBox "Schreibgeschützt!" Else ' Schreibschutz erstellen! oFolder.Attributes = nAttr Or ReadOnly End If Erstellungsdatum, letzte Änderung und Datum des letzten Zugriffes ermitteln ' Erstellungsdatum MsgBox "Erstellungsdatum: " & oFolder.DateCreated ' Letzter Zugriff MsgBox oFolder.DateLastAccessed ' Letzte Änderung MsgBox oFolder.DateLastModified Kopieren, Löschen und Verschieben Ordnertyp und Größe ermitteln Die Größe eines Ordners (inkl. aller Unterordner und Dateien) lässt sich über die Size-Eigenschaft ermitteln. Aber Achtung: Hin und wieder tritt beim Abfragen der Size-Eigenschaft der Laufzeitfehler "70 - Zugriff verweigert" auf. Deshalb empfiehlt es sich hier immer, eine Fehlerbehandlung einzubauen: ' Fehlerbehandlung aktivieren On Error Resume Next ' Ordnergröße (inkl. Unterordner und Dateien) Dim nBytes As Currency nBytes = oFolder.Size If Err.Number = 70 Then nBytes = -1 ' Zugriff verweigert! ' Fehlerbehandlung ausschalten On Error Goto 0 MsgBox "Typ: " & oFolder.Type & vbCrLf & _ "Größe: " & IIf(nBytes = -1, "unbekannt", _ FormatNumber(nBytes / 1024, 0) & " KB") Laufwerksbuchstabe, Name des Ordners, vollständiger Pfad usw. ' Laufwerksbuchstabe MsgBox oFolder.Drive ' Ordnername (ohne Pfadangabe) MsgBox oFolder.Name ' vollständiger Pfad (Standard-Eigenschaft) MsgBox oFolder.Path ' Kurzer Dateiname (im DOS-Format 8.3) MsgBox oFolder.ShortName ' Kurzer Pfadname (im DOS-Format 8.3) MsgBox oFolder.ShortPath Übergeordneten Ordner ermitteln If Not oFolder.IsRootFolder Then ' Übergeordneten Ordner ermitteln MsgBox "Übergeordneter Ordner: " & oFolder.ParentFolder End If Anmerkung: Bei ParentFolder handelt es sich um ein Folder-Objekt, das Sie wie folgt verwenden können: Dim oParent As Folder If Not oFolder.IsRootFolder Then Set oParent = oFolder.ParentFolder End If Gibt es weitere Unterordner? MsgBox "Anzahl Unterordner: " & CStr(oFolder.SubFolders.Count) Wie man über "SubFolders" alle Unterordner ermitteln kann, haben wir Ihnen bereits am Anfang der Beschreibung des Folder-Objekts gezeigt. Das File-Objekt Wie bereits gezeigt, lassen sich über die Files-Aufzählung des Folder-Objekts alle Dateien eines Verzeichnisses ermitteln. Im Gegensatz zur Visual Basic DIR-Funktion besteht jedoch keine Möglichkeit einen Dateifilter festzulegen (wie z.B. *.txt), d.h. es werden immer alle Dateien ermittelt. Ist dies jedochnicht erwünscht, müssen Sie die Schleife von a-z durchlaufen und die Ausgabe entsprechend filtern: ' nur .TXT-Dateien in einer ListBox anzeigen Dim oFolder As Folder Dim oFile As File ' Ausgangsverzeichnis Set oFolder = oFSO.GetFolder("d:\temp") ' alle Dateien durchlaufen For Each oFile In oFolder.Files ' nur .txt Dateien! If LCase$(oFSO.GetExtensionName(oFile)) = "txt" Then List1.AddItem oFile.Name End If Next Die Anzahl der in einem Verzeichnis vorhandenen Dateien lässt sich über Files.Count ermitteln: ' Anzahl Dateien MsgBox oFolder.Files.Count Informationen einer bestimmten Datei ermitteln
Type enthält eine von der Dateierweiterung abhängige Dateibeschreibung, z.B. "Microsoft Access-Datenbank" für MDB-Dateien. Bei der Dateibeschreibung handelt es sich um die selbe Beschreibung, die auch im Windows Explorer angezeigt wird. Anmerkung: Über die Name-Eigenschaft kann der Dateiname nicht nur gelesen, sondern auch neu festgelegt werden: ' Datei umbenennen Dim oFile As File Set oFile = oFolder.Files("Dateiname") oFile.Name = "Neuer_Dateiname" Systemverzeichnisse und temporäre Dateinamen Das FSO-Objekt stellt neben den Drive-, Folder- und File-Objekten noch zusätzliche weitere Eigenschaften zur Verfügung, die sehr häufig in der eigenen Anwendung benötigt werden. Spezielle Systemverzeichnisse Dim oFSO As FileSystemObject ' Verzeichnis für temporäre Dateien MsgBox oFSO.GetSpecialFolder(TemporaryFolder) ' Windowsverzeichnis MsgBox oFSO.GetSpecialFolder(WindowsFolder) ' Systemverzeichnis MsgBox oFSO.GetSpecialFolder(SystemFolder) Temporäre Dateinamen ' Neuer temporärer Dateiname Dim sFileTemp As String sFileTemp = oFSO.GetTempFile() ' vollständiger Pfad sFileTemp = oFSO.GetSpecialFolder(TemporaryFolder) & _ "\" & sFileTemp Hilfsfunktionen für Dateinamen / Verzeichnisse Das FSO-Objekt stellt diverse Methoden zur Verfügung, die Ihnen bei der Analyse bzw. Synthesevon Datei- und Verzeichnisnamen behilflich sind. Hierbei erwarten die nachfolgenden Methoden immer String-Parameter und geben als Ergebnis ebenfalls wieder einen String zurück, d.h. Sie können die Methoden auch unabhängig von den Eigenschaften des File-/Folder-Objekts einsetzen. BuildPath setzt einen Pfad und Dateinamen zusammen: MsgBox oFSO.BuildPath("c:\", "test.txt") ' c:\test.txt GetAbsolutePathName liefert den vollständigen Dateinamen einer Datei, wenn nur ein Name relativ zum aktuellen Verzeichnis angegeben wurde: ' Annahme: aktuelles Verzeichnis = c:\temp, ' dann gibt nachfolgender Aufruf ' "c:\temp\doc\myDoc.doc" zurück MsgBox oFSO.GetAbsolutePathName("doc\myDoc.doc") GetBaseName liefert den reinen Dateinamen - ohne Pfadangabe und ohne Dateierweiterung: ' Liefert "test" MsgBox oFSO.GetBaseName("c:\temp\test.tmp") GetDriveName gibt das Laufwerk zurück. Als Parameter kann entweder ein Verzeichnis oder ein vollständiger Dateiname inkl. Pfadangabe angegeben werden. ' Liefert "c:" MsgBox oFSO.GetDriveName("c:\temp\test.txt") GetExtensionName gibt die Dateierweiterung eines Dateinamens zurück: ' Liefert "txt" MsgBox oFSO.GetExtensionName("c:\temp\test.txt") GetFileName extrahiert den Dateinamen inkl. Extension aus Pfad+Dateiname: ' Liefert "test.txt" MsgBox oFSO.GetFileName("c:\temp\test.txt") GetParentFolderName extrahiert den Pfad aus Pfad+Dateiname bzw. gibt das übergeordnete Verzeichnis einer Pfadangabe zurück: ' Liefert "c:\temp" MsgBox oFSO.GetParentFolderName("c:\temp\test.txt") ' Liefert c:\ MsgBox oFSO.GetParentFolderName("c:\temp") Ausblick auf Teil 3 Nun, da wir alle Objekte des FileSystemObject besprochen haben und auch auf alle Eigenschaften und Methoden eingegangen sind, wäre es sicherlich ganz hilfreich, unser "neues Wissen" in einem kleineren (oder auch größeren) Projekt zu demonstrieren Und genau das haben wir auch vor! Im abschließenden dritten Teil unseres FSO-Workshops "basteln" wir einen kleinen Datei-Commander, ähnlich dem bekannten Norton Commander von der Firma Symantec. Unseren Datei-Commander wollen wir hierbei mit folgenden Features ausstatten:
Sie sehen schon: Wir werden wirklich alle Funktionen des FSO-Objekt ausschöpfen. Dieser Workshop wurde bereits 71.443 mal aufgerufen.
Anzeige
Diesen und auch alle anderen Workshops finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevAniGif (VB/VBA) Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Tipp des Monats September 2024 Dieter Otter Übergabeparameter: String oder Array? Mit der IsArray-Funktion lässt sich prüfen, ob es sich bei einem Übergabeparameter an eine Prozedur um ein Array oder einer "einfachen" Variable handelt. Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
|||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |