Rubrik: Dialoge/Dateien | VB-Versionen: VB5, VB6 | 01.12.02 |
FSO: Arbeiten mit Dateien und Ordner, Teil 1 In diesem Workshop erfahren Sie, wie Sie mit Hilfe des FileSystemObjects (kurz FSO) Dateioperationen auf Ordner und Dateien ausführen. Hierzu zählen das Erstellen von Dateien und Ordner, das Umbenennen, Kopieren, Löschen und Verschieben. | ||
Autor: Dieter Otter | Bewertung: | Views: 126.382 |
In diesem Workshop erfahren Sie, wie Sie mit Hilfe des FileSystemObjects (kurz FSO) Dateioperationen auf Ordner und Dateien ausführen. Hierzu zählen das Erstellen von Dateien und Ordner, das Umbenennen, Kopieren, Löschen und Verschieben.
Einführung
Bei den FileSystemObjects (kurz FSO) handelt es sich um Objektklassen zur Analysierung des Dateisystems. Zudem werden noch Funktionen zum Lesen und Schreiben von Textdateien bereitgestellt. Im Gegensatz zu den normalen VB-Kommandos können auch Unicode-Formate gelesen und geschrieben werden.
Da die FileSystemObjects nicht integraler Bestandteil von Visual Basic sind, müssen Sie diese erst aktivieren. Hierzu öffnen Sie den Dialog Projekt - Verweise und aktivieren dort den Eintrag Microsoft Scripting Runtime. Das bedeutet wiederum, dass Sie, wenn Sie Ihre Anwendung auf einem Fremdrechner installieren, dafür sorgen müssen, dass auch dort die FSO-Bibliothek vorhanden ist. Auf deutsch: Sie müssen die Datei scrrun.dll (ca. 400 KB) mitliefern.
Die FSO-Objektbibliothek besteht aus mehreren Objekten. Das oberste Glied ist das FileSystemObjekt, das Ausgangspunkt für verschiedene Methoden ist, um Drive-, File-, Folder- und TextStream-Objekte zu erzeugen. Genau aus diesem Grund scheint es sinnvoll, eine Variable mit Verweis auf dieses oberste Glied global in seinem Projekt zu deklarieren. Dies sollte in einem Modul erfolgen:
' In Modul ' Verweis auf das FileSystemObject Public oFSO As New FileSystemObject
Existenz von Laufwerk, Ordner oder Datei prüfen
Mit dem FileSystemObject ist es ein Leichtes zu prüfen, ob ein bestimmtes Laufwerk, ein bestimmter Ordner oder eine bestimmte Datei existiert.
' Existenz eines Laufwerks prüfen Dim bDriveExists As Boolean bDriveExists = oFSO.DriveExists("F:")
' Existenz eines Ordners prüfen Dim bFolderExists As Boolean bFolderExists = oFSO.FolderExists("F:\temp")
' Existenz einer Datei prüfen Dim bFileExists As Boolean bFileExists = oFSO.FileExists("F:\temp\myFile.exe")
Alle diese ...Exists-Methoden geben als Rückgabewert entweder True oder False zurück.
Neuen Ordner erstellen
Für das Erstellen eines neuen Ordners stellt uns das FileSystemObject die CreateFolder-Methode zur Verfügung:
' Existiert der Ordner? If Not oFSO.FolderExists("F:\temp") Then ' Nein! Jetzt erstellen... If oFSO.CreateFolder("F:\temp") Then ' Ordner wurde korrekt erstellt! End If End If
Hinweis: Die CreateFolder-Methode kann keine mehrstufigen Verzeichnisse erstellen! Um verschachtelte Verzeichnisse zu erstellen, müssen diese von oberster Ebene aus einzeln erstellt werden.
Textdatei erstellen
Mit dem TextStream-Objekt lassen sich Textdateien einlesen und auch schreiben - wahlweise in ANSI- oder Unicode:
' TextStream-Objekt erstellen Dim oStream As TextStream
' Neue Textdatei erstellen. Falls vorhanden überschreiben! Set oStream = oFSO.CreateTextFile(Filename, True)
Der zweite Parameter (im Beispiel TRUE) gibt an, ob die Datei überschrieben werden soll, falls bereits vorhanden.
' Text an bestehende Datei anhängen Set oStream = oFSO.OpenTextFile(Filename, ForAppending)
Achtung! Es wird ein Laufzeitfehler ausgelöst, wenn Sie versuchen eine Datei mit ForAppending zu öffnen, die noch gar nicht existiert!
' Textzeile schreiben (mit autom. Zeilenumbruch!) oStream.WriteLine "IrgendEinText"
' Text ohne autom. Zeilenumbruch schreiben oStream.Write "IrgendEinText"
' 2 Leerzeichen schreiben oStream.WriteBlankLines 2
Nach getaner Arbeit muss das Textfile natürlich wieder geschlossen werden. Hierzu rufen Sie die Close-Methode des TextStream-Objekts auf:
' Textfile schließen oStream.Close
Textdatei auslesen
Genau wie für das Erstellen und Schreiben von Textdateien erfolgt das Auslesen wiederum über das TextStream-Objekt:
' TextStream-Objekt erstellen Dim oStream As TextStream
' Textdatei zum Lesen öffnen Set oStream = oFSO.OpenTextFile(Filename, ForReading)
' Gesamten Inhalt in eine String-Variable einlesen Dim sText As String sText = oStream.ReadAll
' Eine einzelne Zeile auslesen Dim sLine As String sLine = oStream.ReadLine
' Eine bestimmte Anzahl Bytes auslesen Dim sBuffer As String Dim nBytes As Long nBytes = 100 sBuffer = oStream.Read(nBytes)
Beispiel:
Alle Zeilen einer Textdatei "zeilenweise" auslesen:
' Text zeilenweise auslesen - bis Dateiende Dim sLine As String Do Until oStream.AtEndOfStream sLine = oStream.ReadLine Loop
Einzelne Zeilen / Zeichen überspringen
Um einzelne Zeichen oder ganze Zeilen beim Auslesen einer Textdatei zu überspringen, gehen Sie wie folgt vor:
' nächste Zeile überspringen oStream.SkipLine
' 10 Zeichen überspringen oStream.Skip 10
Ermitteln der aktuellen Dateiposition (Zeile / Spalte)
Über die Methoden Line und Column erhalten Sie jederzeit Auskunft, in welcher Zeile bzw. Spalte sich der Dateizeiger gerade befindet:
' aktuelle Zeile und Spalte Dim nLine As Long Dim nCol As Long nLine = oStream.Line nCol = oStream.Column
Und natürlich gilt auch beim Auslesen einer Textdatei: Nach Beendigung - Textfile schließen:
' Textfile schließen oStream.Close
Ordner verschieben, umbenennen, kopieren und löschen
Für das Umbenennen, Verschieben, Kopieren oder auch Löschen eines Ordners stellt uns das FileSystemObject alle benötigten Funktionen zur Verfügung:
Ordner umbenennen
Das Umbenennen eines Ordners erfolgt über die MoveFolder-Methode.
Nachfolgendes Beispiel benennt den Order "temp" auf dem Laufwerk F: nach temp_1 um:
' Ordner umbenennen oFSO.MoveFolder "f:\temp", "f:\temp_1"
Ordner verschieben
Das Verschieben eines Ordner erfolgt ebenfalls über die MoveFolder-Methode. Geben Sie einfach im zweiten Parameter den neuen Ort an.
' Ordner verschieben oFSO.MoveFolder "f:\temp", "f:\ordner\temp"
Hinweis: Das Verschieben eines Ordners kann immer nur innerhalb eines Laufwerks erfolgen. Es ist nicht möglich einen Ordner mittels MoveFolder auf ein anderes Laufwerk zu verschieben! Weiter ist zu beachten, dass der Zielordner bereits existieren muss und Sie den (neuen) Namen des Ausgangs-Ordners mit angeben. D.h.: MoveFolder kann einen Ordner verschieben und gleichzeitig umbenennen!
Ordner kopieren
Das Kopieren eines Ordners (samt aller enthaltenen Dateien und Unterordner) erfolgt über die CopyFolder-Methode:
' Ordner kopieren Dim sFolder As String Dim sCopyTo As String ' Ausgangsordner sFolder = "f:\temp" ' Neues Ziel sCopyTo = "e:\" ' Ordner samt Inhalt kopieren oFSO.CopyFolder sFolder, sCopyTo
Hinweis: Evtl. vorhandene existierende Ordner/Dateien werden hierbei überschrieben. Ist dies nicht gewünscht, geben Sie False als zusätzlichen dritten Parameter an:
' Ordner kopieren: Vorhandene Dateien nicht überschreiben! oFSO.CopyFolder sFolder, sCopyTo, False
Ordner löschen
Das Löschen von Ordner, einschließlich aller enthaltenen Dateien und Unterordner, erfolgt über die DeleteFolder-Methode:
' Ordner löschen oFSO.DeleteFolder "e:\temp", True
Der zweite Parameter (force) gibt hierbei an, ob immer alles gelöscht werden soll (True) oder nur Dateien/Ordner, die nicht schreibgeschützt sind (False).
Kurze Zusammenfassung
Um nun einen Ordner auf ein anderes Laufwerk zu verschieben, benötigen Sie die CopyFolder und DeleteFolder-Methode:
' Ordner auf ein anderes Laufwerk verschieben Dim sFolder As String Dim sMoveTo As String ' Ausgangsordner sFolder = "f:\temp" ' nach Laufwerk E: verschieben sMoveTo = "e:\" ' zunächst Ordner kopieren... oFSO.CopyFolder sFolder, sMoveTo, True ' ...und anschließend Ausgangsordner löschen oFSO.DeleteFolder sFolder, True
Dateien verschieben, umbenennen, kopieren und löschen
Das Umbenennen, Verschieben, Kopieren und Löschen von Dateien erfolgt analog der gerade beschriebenen Vorgehensweise für Ordner. Anstelle der ...Folder-Methoden verwenden Sie hierfür einfach die entsprechenden ...File-Methoden.
Datei umbenennen
Das Umbenennen einer Datei erfolgt über die MoveFile-Methode.
Nachfolgendes Beispiel benennt die Datei "test.txt" im Ordner F:\temp nach test1.txt um:
' Datei umbenennen oFSO.MoveFile "f:\temp\test.txt", "f:\temp\test1.txt"
Datei verschieben
Das Verschieben einer Datei erfolgt ebenfalls über die MoveFile-Methode. Geben Sie einfach im zweiten Parameter den neuen Ort an.
' Datei verschieben oFSO.MoveFile "f:\temp\test.txt", "f:\ordner\temp\test.txt"
Hinweis: Das Verschieben einer Datei kann immer nur innerhalb eines Laufwerks erfolgen. Es ist nicht möglich eine Datei mittels MoveFile auf ein anderes Laufwerk zu verschieben! Weiter ist zu beachten, dass der Zielordner bereits existieren muss und Sie den (neuen) Namen der Ausgangs-Datei mit angeben. D.h.: MoveFile kann eine Datei verschieben und gleichzeitig umbenennen!
Datei kopieren
Das Kopieren einer Datei erfolgt über die CopyFile-Methode:
' Datei kopieren Dim sFile As String Dim sCopyTo As String ' Ausgangsdatei sFile = "f:\temp\test.txt" ' Neues Ziel sCopyTo = "e:\" ' Datei kopieren oFSO.CopyFile sFile, sCopyTo
Hinweis: Ist die Datei im Zielordner bereits vorhanden, wird dieseautomatisch überschrieben. Ist dies nicht gewünscht, geben Sie False als zusätzlichen dritten Parameter an:
' Datei kopieren: Vorhandene Datei nicht überschreiben! oFSO.CopyFile sFile, sCopyTo, False
Achtung! Geben Sie den Zielordner immer mit abschließendem Backslash an, da die CopyFile-Methode sonst versucht, die Datei in den angegebenen (Ordner)namen umzubenennen, was wiederum zu einem Laufzeitfehler führen würde.
' Datei nach e:\temp kopieren ' Ordner "e:\temp" existiert bereits! oFSO.CopyFile sFile, "e:\temp" ' FALSCH! Es kommt zu einem Laufzeitfehler! oFSO.CopyFile sFile, "e:\temp\" ' Korrekt!
Datei löschen
Das Löschen einer Datei erfolgt über die DeleteFile-Methode:
' Datei löschen oFSO.DeleteFile "e:\temp\test.txt", True
Über den zweiten Parameter (force) können Sie bestimmen, ob die Datei nur gelöscht werden soll, falls diese nicht schreibgeschützt ist (False) oder ob versucht werden soll, die Datei immer zu löschen (True).
Kurze Zusammenfassung
Um nun eine Datei auf ein anderes Laufwerk zu verschieben, benötigen Sie die CopyFolder und DeleteFolder-Methode:
' Datei auf ein anderes Laufwerk verschieben Dim sFile As String Dim sMoveTo As String ' Ausgangsdatei sFile = "f:\temp\test.txt" ' nach e:\temp: verschieben sMoveTo = "e:\temp\" ' zunächst Datei kopieren... oFSO.CopyFolder sFile, sMoveTo, True ' ...und anschließend Ausgangsdatei löschen oFSO.DeleteFile sFile, True
Ausblick auf Teil 2
Das FileSystemObject bietet natürlich noch viel mehr, als einfach nur Ordner/Dateien zu kopieren, löschen etc.
So lassen sich u. a. spezielle Systemordner ermitteln, alle Ordner eines Laufwerks auflisten oder auch alle Dateien eines Ordners in Erfahrung bringen. Weiterhin stellt das FSO-Objekt diverse Hilfsfunktionen zur Verfügung, die bei der Analyse bzw. Synthese von Dateinamen hilfreich sind.
Nachfolgend eine kurze Zusammenfassung was Sie in Teil 2 erwartet:
- Drive-Objekt und seine Eigenschaften (freier Speicherplatz, Volume-Information usw.)
- Folder-Objekt und seine Eigenschaften (Größe eines Ordners, Ermitteln aller Dateien usw.)
- File-Objekt und seine Eigenschaften (Größe einer Datei, Ermitteln von Dateiversion, Erstellungs- und Änderungsdatum usw.)
- zusätzliche FSO-Methoden (Systemverzeichnisse ermitteln usw.)
- Hilfsfunktionen zur Dateinamen-Analyse (BuildPath, GetAbsolutePath, GetBaseName usw.)
Das alles erfahren Sie dann in unsrem zweiten Teil zum Workshop "FSO - FileSystemObjects".