WICHTIG: Tutorial ist veraltet. Neue Version:
[Tutorial] Alles über Dateien 2.2
Ich bitte um Kommentare, wie das Tutorial euch gefällt. (Ist mein erstes Tutorial)
So, aber nun zum eigentlichen Tutorial.
Ich möchte hier mal ein kleines Tutorial über das Arbeiten mit Dateien schreiben. Es geht um,
Wenn das Tutorial gut ankommt, werden vieleicht noch weitere Punkte hinzukommen.
Kapitel 1: Datei lesen und schreiben
Für folgende Beispiele ist es notwenig, dass die Library System.Windows.Forms referenziert ist und die Namenräume System.IO und System.Windows.Forms importiert werden.
Abschnitt 1.1: Dateien schreiben
Für das Lesen und Schreiben von Dateien stellt das .net Framwork ein paar nützliche Klassen im Namensraum System.IO bereit. Die, wie ich finde für Anfänger am besten geeignete Klasse zum Arbeiten mit Dateien ist die Klasse System.IO.File. Ich werde diese Klasse hier mal kurz vorstellen.
Das folgende Programm zeigt, wie man eine Datei erzeugen und gleich etwas reinschreiben kann. Als Beispiel nehme ich jetzt mal eine Telefonliste her.
Die Namen und Telefonnummer werden durch einen Strichpunkt( ; ) getrennt.
C#-Code: |
using System;
using System.IO;
using System.Windows.Forms;
namespace tigerclaw_software_tutorial
{
class Start
{
[STAThread]
static void Main(string[] args)
{
SaveTelefonNumbers();
Console.WriteLine("Programmende");
Console.ReadLine();
}
private static void SaveTelefonNumbers()
{
StreamWriter writer = File.CreateText(Application.StartupPath + "\\telefonnummern.txt");
writer.WriteLine("Thomas;223245");
writer.WriteLine("Matze;22741");
writer.WriteLine("Michael;357228");
writer.WriteLine("Richard;242531");
writer.WriteLine("Dominik;242352");
writer.Close();
}
}
}
|
Der Inhalt der Datei telefonnummern.txt sollte nach der Ausführung des Programms so aussehen:
| Zitat: |
Thomas;223245
Matze;22741
Michael;357228
Richard;242531
Dominik;242352 |
Die Namen und Telefonnummer habe ich mir natürlich nur ausgedacht ;D.
Wichtig: Immer nach dem Schreiben den writer schließen! (mit writer.Close() ) Ansonsten wird der Ausgabebuffer nicht entleert und es kann passieren, dass der vermeintlich geschriebene Text nicht in der Datei gespeichert wurde.
Abschnitt 1.2: Datei einlesen
Im Namensraum System.IO.File gibt es, wie bereits erwähnt auch Methoden zum Lesen von Dateien. Ich werde das vorherige Beispiel mit der Telefonliste um eine Methode erweitern, die die Namen und Telefonnummern aus der Datei wieder einliest. Dabei benutze ich die Methode String.Split() um die Namen von den Telefonnummern zu trennen.
Der gesamte Programmcode: (Einschließlich der Code aus dem ersten Beispiel)
C#-Code: |
using System;
using System.IO;
using System.Windows.Forms;
namespace tigerclaw_software_tutorial
{
class Start
{
[STAThread]
static void Main(string[] args)
{
new Start();
}
public Start()
{
SaveTelefonNumbers();
ReadTelefonNumbers();
Console.WriteLine("Programmende");
Console.ReadLine();
}
private void SaveTelefonNumbers()
{
StreamWriter writer = File.CreateText(Application.StartupPath + "\\telefonnummern.txt");
writer.WriteLine("Thomas;223245");
writer.WriteLine("Matze;22741");
writer.WriteLine("Michael;357228");
writer.WriteLine("Richard;242531");
writer.WriteLine("Dominik;242352");
writer.Close();
}
private void ReadTelefonNumbers()
{
try
{
string[] zeile;
string name, nummer;
StreamReader reader = File.OpenText(Application.StartupPath + "\\telefonnummern.txt");
for (int i = 0; -1 != reader.Peek(); i++)
{
zeile = reader.ReadLine().Split(';');
name = zeile[0];
nummer = zeile[1];
Console.WriteLine("Name: {0} Telefonnummer: {1}", name, nummer);
}
reader.Close();
}
catch (FileNotFoundException exc)
{
Console.WriteLine("Die Datei telefonnummern.txt wurde nicht gefunden!");
Console.WriteLine(exc.Message);
}
}
}
}
|
Erklärung: Zuerst deklarieren wir die Variablen, die wir dann zum Einlesen und Ausgeben der Telefonnummmern brauchen. Das Stringarray zeile brauchen wir, um die eingelesen zeilen beim ; zu trennen. Nun machen wir eine for schleifen, die solange läuft, bis Peek - 1 ergibt. Dann ist die Datei fertiggelesen. (Weil kein Inhalt mehr da ist). Dann lesen wir eine Zeile aus und splitten sie. Danach geben wir den Namen und die Nummer aus. Am Schluß wieder den Stream zu der Datei schließen. Bei der Arbeit mit Dateien ist eine Fehlerbehandlung mit try...catch sehr zu empfehlen.
So, ich habe mich entschlossen, das Tutorial weiterzuschreiben.
Kapitel 2: Löschen, Verschieben von Dateien
In diesem Kapitel geht es um das Löschen, Verschieben von Dateien und wie man überprüfen kann, ob eine Datei existiert und wie man eine Datei mit dem Standardprogramm öffnen kann.(Das Programm, das geöffnet wird wenn man die Datei öffnet)
Abschnitt 1.1: Verschieben, Löschen, etc.
Dieser Punkt ist schnell abgehakt. Notwendig ist der Import von System.IO.
C#-Code: |
File.Move(@"C:\Test.txt",@"D:\Test.txt";);
File.Delete(@"D:\Test.txt";);
File.Copy(@"C:\Test.txt", @"D:\Test.txt";)
|
Die Methoden der Klasse File haben aber noch mehr drauf.
Man kann mit Ihnen auch den Erstellungszeitpunkt, den letzten Zugriffszeitpunkt und den Zeitpunkt der letzten Veränderung bekommen, ja diese Daten sogar beliebig verändern. Für folgendes Beispiel wird (wieder einmal) der Import des Namespaces System.IO benötigt.
C#-Code: |
Console.WriteLine("Erstellungszeitpunkt: \t"+File.GetCreationTime("C:\\Test.txt";));
Console.WriteLine("Letzter Zugriff: \t"+File.GetLastAccessTime("C:\\Test.txt";));
Console.WriteLine("Letzte Änderung: \t"+File.GetLastWriteTime("C:\\Test.txt";));
|
Welche Zeile was macht, sollte aus der Ausgabe des Programms und den Zeichenketten hervorgehen.
So, das war übrigens mein erstes Tutorial. Kommentare sind sehr erwünscht.
Changelog:- 27. 04. 06: Die Methode SaveTelephon Numbers aus dem 1. Codebeispiel static gemacht, da sonst das Beispiel nicht funktioniert (Danke an XGenne)
- Den Konstruktor entfernt und den Code in die Main Methode verlagert (Danke an herbivore)