Dieser Artikel richtet sich hauptsächlich an Einsteiger in das .net Framework. Immer wieder tauchen Fragen zum Thema Dateien erstellen, lesen, kopieren oder Verschieben auf.
Nun sind wir in einem Objektorientierten System, und wie schon die alten Römer sagten: "Viele Wege führen nach Rom.", gilt diese Aussage nun auch für das Erstellen und Lesen von Dateien.
Generell befindet sich der Einstiegspunkt für das Dateisystem im Namespace System.IO
Hier sind verschiedene Klassen und Unternamensräume enthalten die die Arbeit mit dem Dateisystem vereinfachen. In diesem Namespace befinden sich aber nicht nur Klassen für den Zugriff auf das Dateisystem sondern auch ganz wesentliche Klassen für die Arbeit für Datenstreams. Die Wesentlichste Klasse ist hier die Klasse Stream welche die Basisklasse für z.B den StreamWriter, StreamReader oder aber auch dem Memorystream (z.B. für Krypthographie) bildet.
Erzeugen Sie eine ASP.NET Anwendung und fügen Sie einer ASP.NET Seite folgende Buttons hinzu:
[Schreiben mit StreamWriter]
[Lesen mit StreamReader]
[Text mit UTF Format speichern / File.Create]
[Text mit UTF Format lesen / FileStream]
[Lesen mit StreamReader / File.OpenText]
[FileStream /File.OpenRead]
[StreamWriter/ File.CreateText]
Fügen Sie ausserdem noch eine TextBox hinzu.
Dateien mit dem StreamReader, StreamWriter
Schreiben (Button [Schreiben mit StreamWriter] ):
Dim meinStream As Stream Dim deinstreamSchreiben As StreamWriter deinstreamSchreiben = New StreamWriter("C:\data\words.txt") deinstreamSchreiben.WriteLine("##############################################################") deinstreamSchreiben.WriteLine("Datei wurde am " & DateTime.Now.ToString() & " geschrieben.") deinstreamSchreiben.WriteLine("") deinstreamSchreiben.Write(Me.TextBox1.Text) deinstreamSchreiben.Close() deinstreamSchreiben = Nothing |
Lesen (Button [Lesen mit StreamReader]):
Me.TextBox1.Text = String.Empty Dim deinstreamLesen As StreamReader deinstreamLesen = New StreamReader("C:\data\words.txt") Me.TextBox1.Text = deinstreamLesen.ReadToEnd() deinstreamLesen.Close() deinstreamLesen = Nothing |
Dateien mit System.File
Lesen:
BSP1 (Button [Lesen mit StreamReader / File.OpenText])
Dim deinstreamLesen As StreamReader deinstreamLesen = File.OpenText("C:\data\wordsUTF.txt") Me.TextBox1.Text = String.Empty Me.TextBox1.Text = deinstreamLesen.ReadToEnd() deinstreamLesen.Close() deinstreamLesen = Nothing |
BSP2 (Button [FileStream /File.OpenRead])
Dim deinFileLesen As FileStream deinFileLesen = File.OpenRead("C:\data\wordsUTF.txt") Dim b(1024) As Byte Dim temp As System.Text.UTF8Encoding = New System.Text.UTF8Encoding(True) Dim strBld As New System.Text.StringBuilder Do While deinFileLesen.Read(b, 0, b.Length) > 0 strBld.Append(temp.GetString(b)) Loop deinFileLesen.Close() deinFileLesen = Nothing Me.TextBox1.Text = strBld.ToString() |
Schreiben:
BSP1 (Button [Text mit UTF Format speichern / File.Create])
Dim deinFileWrite As FileStream deinFileWrite = File.Create("C:\data\wordsUTF.txt") Dim info As Byte() = New System.Text.UTF8Encoding(True).GetBytes(Me.TextBox1.Text) deinFileWrite.Write(info, 0, info.Length) deinFileWrite.Close() deinFileWrite = Nothing |
Bsp2 (Button [StreamWriter/ File.CreateText])
Dim deinFileWrite As StreamWriter deinFileWrite = File.CreateText("C:\data\wordsUTF.txt") deinFileWrite.Write(Me.TextBox1.Text) deinFileWrite.Close() deinFileWrite = Nothing |
Die Beispiele unterscheiden sich zum grössten Teil durch die Verwendeten Streams. So nutzen wir zum Beispiel die Klasse System.File welche zwei Methoden Create() oder CreateText() anbietet. Dies beiden Methoden geben unterschiedliche Stream Typen zurück.
Dateioperationen mit .net
Auch hier gibt es zwei Ansatzarten. Entweder man arbeitet mit System.File und den entsprechenden Methoden oder man nutzt die FileIno Klasse welche wir später noch kennenlernen werden.
Fügen Sie drei weitere Buttons auf die Form:
[Datei kopieren]
[Datei verschieben]
[Datei löschen]
Kopieren von Dateien
Dim path As String = "c:\data\words.txt" Dim path2 As String = "Kopie von " + path Try File.Delete(path2) File.Copy(path, path2) File.Copy(path, path2, True)
Catch ex As Exception TextBox1.Text = "Fehler beim Datei kopieren :" + ex.Message End Try
|
Verschieben von Dateien
Bemerkung diese Funktionaltität können Sie auch nutzen wenn Sie Dateien umbenennen wollen:
Dim path As String = "c:\data\words.txt" Dim path2 As String = "Kopie von " + path
Try File.Delete(path2) File.Move(path, path2) File.Move(path, path2) Catch ex As Exception TextBox1.Text = "Fehler beim Datei kopieren :" + ex.Message End Try |
Löschen von Dateien
Dim path As String = "c:\data\words.txt" Dim path2 As String = "Kopie von " + path File.Delete(path2) |
Verzeichnissystem mit Directory
Nun folgt ein Beispiel um alle Laufwerke eines Computers auszulesen und die darin enthaltenen Verzeichnisse und Dateien anzuzeigen.
Fügen Sie der WebForm einen Button [Dateisystem Beispiel] und drei ListBoxen [lbDrives],[lbFolders],[lbFiles] hinzu.
Klicken Sie doppelt auf den Button [Dateisystem Beispiel] und fügen Sie folgenden Code ein:
Dim drive As String For Each drive In Directory.GetLogicalDrives() Me.lbDrives.Items.Add(drive) Next |
Klicken Sie dann doppelt auf die erste ListBox [lbDrives] und implementieren Sie den SelectedIndexChanged Eventhandler mit diesem Code:
Me.lbFolders.Items.Clear() Me.lbFiles.Items.Clear() Dim fullPath As String = Me.lbDrives.SelectedItem.Text Dim dir As String For Each dir In Directory.GetDirectories(fullPath) Me.lbFolders.Items.Add(Path.GetFileName(dir)) Next Dim fileName As String For Each fileName In Directory.GetFiles(fullPath) Me.lbFiles.Items.Add(Path.GetFileName(fileName)) Next |
Übrigens: Wenn Sie eingeschworener VB Entwickler sind, dann hab ich da noch was für Sie: Das Modul FileSystem aus dem Microsoft.VisualBasic Namespace ist einen Blick wert (ja auch für C# Entwickler ;-) )