vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: .NET   |   VB-Versionen: VB.NET15.08.04
Arbeiten mit Dateien und Ordnern in .NET, Teil 1

In diesem Workshop erfahren Sie, wie Sie mit Hilfe des .NET Framework Operationen durchführen. Dazu zählen neben dem Anlegen, Kopieren, Verschieben und Löschen von Dateien und Ordnern, auch das Sammeln von Informationen sowie das Schreiben und Lesen von Dateien.

Autor:  Ralf EhlertBewertung:  Views:  73.549 

In diesem Workshop erfahren Sie, wie Sie mit Hilfe des .NET Framework Operationen durchführen. Dazu zählen neben dem Anlegen, Kopieren, Verschieben und Löschen von Dateien und Ordnern, auch das Sammeln von Informationen sowie das Schreiben und Lesen von Dateien.

Einführung

Das .NET Framework stellt viele Klassen zur Bearbeitung von Dateien und Ordnern im Namespace System.IO bereit. Um sich das Arbeiten mit Dateien und Ordnern in .NET etwas angenehmer zu gestalten, importiert man den Namespace System.IO mittels Imports.

Die Existenz von Laufwerken, Ordnern oder Dateien prüfen
Mit der Exists-Methode der Directonary- oder File-Klasse ist es ein Leichtes, die Existenz eines Laufwerkes, Ordners oder Datei zu überprüfen.

' Existenz eines Laufwerks prüfen
Dim bDriveExists As Boolean
bDriveExists = Directonary.Exists("G:")
 
' Existenz eines Ordners prüfen
Dim bDirectoryExists As Boolean
bDirectoryExists = Directonary.Exists("G:\Temp")
 
' Existenz einer Datei prüfen
Dim bFileExists As Boolean
bFileExists = File.Exists("G:\Temp\Testfile.txt")

Die Exists-Methode der Directory- oder File-Klasse geben entweder True (existiert) oder False (existiert nicht) zurück.

Neuen Ordner erstellen
Für das Erstellen eines Ordners stellt uns die Klasse Directory die Methode CreateDirectory bereit:

' Existiert der Ordner schon?
If Not Directory.Exists("D:\Test") Then
  ' Nein! Jetzt erstellen...
  Directory.CreateDirectory("D:\Test")
End If

Hinweis 1: Die CreateDirectory-Methode kann auch verschachtelte Verzeichnisse erstellen! Die Erstellung von Ordnern kann aber durch viele Faktoren misslingen (z.B. durch fehlende Berechtigungen, Schreibschutz des Erstellungsortes oder der Pfad ist zu lang. Im 3.Teil diesen Workshops wird eine Klassenbibliothek erstellt, die diese Fehlerquellen beachtet.

Hinweis 2: Die CreateDirectory-Methode gibt eine Struktur vom Typ DirectoryInfo zurück. Über diese Struktur können Sie Operationen wie Kopieren, Verschieben, Löschen oder Umbenennen vornehmen. Falls Sie aber nur Ordner erstellen wollen, brauchen Sie den Rückgabewert nicht zu speichern.

Textdatei erstellen
Eine Datei ist in .NET grundsätzlich ein Stream, also eine Aneinanderreihung von Bytes. Je nach Art des Streams kann man Daten aus einem Stream lesen oder Daten in einen Stream speichern. Einige Streams erlauben neben Lese- und Schreibzugriffe auch das Navigieren.

Um eine neue Datei anzulegen, muss man eine Instanz von der FileStream-Klasse anlegen.

Dim FStream As New FileStream(“C:\TestStream.txt”, FileMode.Create, FileAccess.ReadWrite, FileShare.Read)

Zur Erklärung: Der erste Parameter gibt den Dateinamen an. Der zweite, Mode, gibt an, wie eine Datei geöffnet wird. Dies entspricht dem For... in VB6. Hier eine Tabelle mit den möglichen Werten:

Bedeutung
FileMode.AppendÖffnet eine Datei und fügt Text ans Ende der Datei an.
FileMode.CreateErstellt eine neue Datei. Falls sie schon existiert, wird sie überschrieben.
FileMode.CreateNewErstellt eine neue Datei. Falls diese schon existiert, wird eine IOException ausgelöst.
FileMode.OpenÖffnet eine Datei. Falls diese nicht existiert, wird eine IOException ausgelöst.
FileMode.OpenOrCreateWenn die angegebene Datei existiert, wird diese geöffnet, ansonsten wird sie angelegt.
FileMode.TruncateÖffnet eine Datei und setzt deren Länge auf 0 Byte. Wenn jetzt gelesen wird, wird eine IOException ausgelöst.

Der dritte Parameter legt den Zugriff fest. Mögliche Werte sind nur lesend (FileAccess.Read), nur schreibend (FileAccess.Write) oder Lese-/Schreibzugriff (FileAccess.ReadWrite).

Der letzte Parameter gibt an, wie auf die Datei zugegriffen werden kann, wenn diese zum zweiten Mal geöffnet wird. Hier die möglichen Werte:

Wert Bedeutung
FileShare.NoneKein Programm kann diese Datei öffnen.
FileShare.WriteDie Datei kann nicht gelesen werden, sondern nur in ihr geschrieben werden.
FileShare.ReadDie Datei kann nur gelesen werden.
FileShare.ReadWriteStandarteinstellung – keine Einschränkungen

Hinweis: Auch das eigene Programm ist von diesen Werten betroffen. Daher kann auch das eigene Programm bei FileShare.None die Datei nicht öffnen.

Diese Einschränkungen werden beim Schließen der Datei aufgehoben.

In eine Textdatei schreiben

' Vorraussetzung: FStream ist ein gültiger FileStream
' StreamWriter anlegen, um komfortabel zu schreiben
Dim SWriter As New StreamWriter(FStream)
 
' Textzeile schreiben (mit autom. Zeilenumbruch!)
SWriter.WriteLine("Irgend eine Zeile")
 
' Text ohne autom. Zeilenumbruch schreiben
SWriter.Write("Text ohne Zeilenumbruch")
 
' 2 Leerzeichen schreiben
SWriter.Write("  ")

Aus einer Textdatei lesen

Genau wie beim Schreiben muss als erstes ein FileStream-Objekt erstellt werden, aus dem gelesen werden soll.

' FileStream anlegen
Dim FStream As New FileStream("C:\Test.txt", FileMode.Open, _
  FileAccess.Read, FileShare.Read)
 
' StreamReader erzeugen und Stream angeben, der verwendet werden soll
Dim SReader As New StreamReader(FStream)
 
' Gesamten Inhalt in eine String-Variable speichern
Dim sText As String = SReader.ReadToEnd
 
' Eine einzelne Zeile auslesen
Dim sLine As String = SReader.ReadLine
 
' Eine Anzahl Zeichen auslesen
Dim Text As String                         ' enthält gelesene Zeichen
Dim BeginToRead As Integer = 0             ' Index, ab dem gelesen wird
Dim Bytes As Integer = 15                  ' Anzahl Zeichen, die gelesen werden
Dim buf(Bytes) As Char                     ' enthält Zeichen, die gelesen werden
SReader.Read(buf, BeginToRead, Bytes)
Buffer = buf

Beispiel: Alle Zeilen einer Textdatei "zeilenweise" auslesen:

' Text zeilenweise auslesen bis Dateiende
Dim sLine As String
Do Until SReader.Peek = -1
  sLine = SReader.ReadLine
Loop

Nach dem Bearbeiten von Dateien…

den StreamReader oder StreamWriter schließen und anschließend den FileStream.

SReader.Close() ' oder SWriter.Close()
FStream.Close()

Ordner verschieben, umbenennen, kopieren und löschen
Für das Umbenennen, Verschieben, Kopieren und Löschen stellt uns das .NET Framework alle Methoden bereit, die wir benötigen.

Ordner umbenennen
Das Umbenennen von Ordnern erfolgt über die Move-Methode der Directory-Klasse. Das folgende Beispiel nennt den Ordner "Test" auf Laufwerk E: in "Test_Umbenannt" um:

' Ordner umbenennen
Directory.Move("E:\Test", "E:\Test_Umbenannt")

Ordner verschieben
Das Verschieben eines Ordners erfolgt ebenfalls über die Move-Methode der Directory-Klasse. Geben Sie im 2.Parameter den neuen Ort an.

' Ordner verschieben
Directory.Move("E:\Temp", "E:\Ordner\Temp")

Hinweis: Das Verschieben eines Ordners kann nur innerhalb eines Laufwerkes erfolgen. Es ist nicht möglich, einen Ordner mit Directory.Move 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.: Directory.Move kann einen Ordner verschieben und gleichzeitig umbenennen!

Ordner kopieren
Das .NET Framework stellt keine Methode bereit, mit der man Ordner kopieren kann. Um die Funktionslücke zu schließen, gibt es mindestens 2 Möglichkeiten:

  1. eigene Methode schreiben
  2. das FileSystemObject (FSO) verwenden

Im 3.Teil dieses Workshops erstellen wir einen kleinen Datei-Commander, der die Funktionalität von einer selbsterstellten Klassenbibliothek nutzt, wo auch eine eigene Kopierfunktion realisiert wird.

Informationen über das FSO gibt es z.B. in der MSDN Library.

Ordner löschen
Um Ordner zu löschen, einschließlich aller Unterordner und gesamtem Inhalt (Dateien) verwendet man die Delete-Methode der Directory-Klasse.

' Ordner löschen
Directory.Delete("E:\Temp", True)

Der den 2.Parameter (recursive) legt fest, ob auch Unterverzeichnisse mit Inhalt gelöscht werden sollen (True) oder ob nur das leere Verzeichnis gelöscht wird (false).

Was ist DirectoryInfo?
DirectoryInfo ist eine Klasse, welche die selbe Funktionalität hat, wie die Directory-Klasse. Die DirectoryInfo-Klasse ist instanzabhängig im Gegensatz zur Directory-Klasse. Wenn Sie eine Methode aus der Directory-Klasse verwenden, wird als erstes überprüft, ob Sie die nötigen Rechte haben. Dies geschieht bei jedem Methodenaufruf. Bei der DirectoryInfo-Klasse geschieht dies einmalig. Dadurch werden "unnötige" Schritte gespart. Die DirectoryInfo-Klasse lohnt sich aber nur, falls Sie auf einen Ordner mehr als einmal zugreifen. Um eine DirectoryInfo-Instanz anzulegen, verwenden Sie folgenden Code:

Dim DInfo As New DirectoryInfo("C:\Test")

Die Methoden sind ähnlich wie die der Directory-Klasse, nur mit leicht geänderten Namen. Weitere Informationen sind u.a. in der MSDN Library zu finden.

Dateien verschieben, umbenennen, kopieren und löschen
Das Umbenennen, Verschieben, Kopieren und Löschen ist in der Klasse File enthalten. Neben diesen Operationen kann man mit einen Methodenaufruf auch eine Datei für das Lesen aus der Datei bzw. Schreiben in die Datei öffnen. Auch bei der File-Klasse gibt es eine "Info-Version" – FileInfo. Diese hat die selben Vorteile wie die DirectoryInfo-Klasse, nur dass sich ihre Methoden auf das Bearbeiten von Dateien und nicht auf Ordner bezieht. Infos sind auch hier u.a. in der MSDN Library zu finden.

Datei verschieben
Das Verschieben einer Datei erfolgt ebenfalls über File.Move(). Das folgende Beispiel verschiebt die Datei "Test.txt" auf Laufwerk D. nach "D:\Temp\Test.txt"

' Datei verschieben
File.Move("D:\Test.txt", "D:\Temp\Test.txt")

Hinweis: Das Zielverzeichnis muss bestehen! Es wird nicht angelegt. Falls es nicht existiert, wird eine IOException ausgelöst. Aber File.Move() kann eine Datei auch auf andere Laufwerke verschieben! Außerdem müssen Sie immer den (neuen) Dateinamen mit angeben. D.h. File.Move kann auch Dateien umbenennen.

Datei umbenennen
Das Umbenennen einer Datei erfolgt über die Move-Methode der File-Klasse. Das folgende Beispiel benennt die Datei "Test.txt" auf Laufwerk D: in "Test1.txt" um:

' Datei umbenennen
File.Move("D:\Test.txt", "D:\Test_Umbenannt.txt")

Dateien kopieren
Das Kopieren von Dateien erfolgt über die Copy-Methode der File-Klasse. Das folgende Beispiel kopiert die Datei "Test.txt" von Laufwerk E: nach dem Ordner D:\Temp:

' Datei kopieren
File.Copy("E:\Test.txt", "D:\Temp\Test.txt", True)

Mit dem letzten Parameter (override) legen Sie fest, ob eine vorhandene Datei überschrieben werden darf (true) oder nicht (false).

Hinweis: Geben Sie den Zielordner immer mit abschließendem Backslash (\) ein, damit ein Fehlverhalten erst gar nicht auftritt.

Dateien löschen
Das Löschen von Dateien erfolgt über die Delete-Methode der File-Klasse. Im folgenden Beispiel wird die Datei "Temp.txt" im Ordner D:\Temp gelöscht.

' Datei löschen
File.Delete("D:\Temp\Temp.txt")

Hinweis: Falls Sie nicht über die benötigten Rechte verfügen, die Datei schreibgeschützt ist oder ein Verzeichnis statt eine Datei als Parameter übergeben wurde, wird eine Exception ausgelöst.

Ausblick auf Teil 2

Im 2.Teil erfahren Sie, wie Sie verschiedene Attribute von Dateien, Ordnern oder Laufwerken auslesen können. Außerdem erfahren Sie, was es mit "Isoliertem Speicher" auf sich hat, welchen Nutzen er bringt und wie man ihn verwenden kann. Auch werden Sie einige nützliche Methoden und Klassen kennen lernen, die Ihnen mit Dateien und Ordner hilfreich sein können.



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.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle 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.