vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2017
 
zurück
Rubrik: Dialoge/Dateien   |   VB-Versionen: VB5, VB601.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 OtterBewertung:     [ Jetzt bewerten ]Views:  102.653 

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:

  1. Drive-Objekt und seine Eigenschaften (freier Speicherplatz, Volume-Information usw.)
  2. Folder-Objekt und seine Eigenschaften (Größe eines Ordners, Ermitteln aller Dateien usw.)
  3. File-Objekt und seine Eigenschaften (Größe einer Datei, Ermitteln von Dateiversion, Erstellungs- und Änderungsdatum usw.)
  4. zusätzliche FSO-Methoden (Systemverzeichnisse ermitteln usw.)
  5. Hilfsfunktionen zur Dateinamen-Analyse (BuildPath, GetAbsolutePath, GetBaseName usw.)

Das alles erfahren Sie dann in unsrem zweiten Teil zum Workshop "FSO - FileSystemObjects".

Dieser Workshop wurde bereits 102.653 mal aufgerufen.

Über diesen Workshop im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Workshop, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (1 Beitrag)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2017 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel