C# – Textdatei – Lesen, Schreiben und zeilenweise Manipulation

In Textdateien kann man mit C# auf einfachste Weise Informationen ablegen. Das Lesen und Schreiben von Textdateien wird dabei wohl am häufigsten verwendet. Wenn aber einzelne Zeilen einer Textdatei gelesen oder manipuliert werden, dann wird es etwas komplizierter. Für diese Einsatzgebiete stelle ich folgende Klasse zur Verfügung. Der folgende Quellcode muss nur in eine leere Klasse kopiert werden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using System;
using System.IO;
 
class TextDatei
{
 ///<summary>
 /// Liefert den Inhalt der Datei zurück.
 ///</summary>
 ///<param name="sFilename">Dateipfad</param>
 public string ReadFile(String sFilename)
 {
  string sContent = "";
 
  if (File.Exists(sFilename))
  {
   StreamReader myFile = new StreamReader(sFilename, System.Text.Encoding.Default);
   sContent = myFile.ReadToEnd();
   myFile.Close();
  }
  return sContent;
 }
 
 ///<summary>
 /// Schreibt den übergebenen Inhalt in eine Textdatei.
 ///</summary>
 ///<param name="sFilename">Pfad zur Datei</param>
 ///<param name="sLines">zu schreibender Text</param>
 public void WriteFile(String sFilename,String sLines)
 {
  StreamWriter myFile = new StreamWriter(sFilename);
  myFile.Write(sLines);
  myFile.Close();
 }
 
 ///<summary>
 /// Fügt den übergebenen Text an das Ende einer Textdatei an.
 ///</summary>
 ///<param name="sFilename">Pfad zur Datei</param>
 ///<param name="sLines">anzufügender Text</param>
 public void Append(string sFilename, string sLines)
 {
  StreamWriter myFile = new StreamWriter(sFilename,true);
  myFile.Write(sLines);
  myFile.Close();
 }
 
 ///<summary>
 /// Liefert den Inhalt der übergebenen Zeilennummer zurück.
 ///</summary>
 ///<param name="sFilename">Pfad zur Datei</param>
 ///<param name="iLine">Zeilennummer</param>
 public string ReadLine(String sFilename, int iLine)
 {
  string sContent = "";
  float fRow=0;
  if (File.Exists(sFilename))
  {
   StreamReader myFile = new StreamReader(sFilename, System.Text.Encoding.Default);
   while (! myFile.EndOfStream && fRow < iLine)
   {
    fRow++;
    sContent = myFile.ReadLine(); 
      }
   myFile.Close();
   if(fRow < iLine) 
    sContent = "";
  }
  return sContent;
 }
 
 /// <summary>
 /// Schreibt den übergebenen Text in eine definierte Zeile.
 ///</summary>
 ///<param name="sFilename">Pfad zur Datei</param>
 ///<param name="iLine">Zeilennummer</param>
 ///<param name="sLines">Text für die übergebene Zeile</param>
 ///<param name="bReplace">Text in dieser Zeile überschreiben (t) oder einfügen (f)</param>
 public void WriteLine(String sFilename, int iLine, string sLines, bool bReplace)
 {
  string sContent = "";
  string[] delimiterstring = { "\r\n" };
 
  if (File.Exists(sFilename))
  {
   StreamReader myFile = new StreamReader(sFilename, System.Text.Encoding.Default);
   sContent = myFile.ReadToEnd();
   myFile.Close();
  }
 
  string[] sCols = sContent.Split(delimiterstring, StringSplitOptions.None);
 
  if (sCols.Length >= iLine)
  {
   if (!bReplace)
    sCols[iLine - 1] = sLines + "\r\n" + sCols[iLine - 1];
   else
    sCols[iLine - 1] = sLines;
 
   sContent = "";
   for (int x = 0; x < sCols.Length-1; x++)
   {
    sContent += sCols[x] + "\r\n";
   }
   sContent += sCols[sCols.Length-1];
 
  }
  else
  {
   for (int x = 0; x < iLine - sCols.Length; x++)
    sContent += "\r\n";
 
   sContent += sLines;
  }
 
 
  StreamWriter mySaveFile = new StreamWriter(sFilename);
  mySaveFile.Write(sContent);
  mySaveFile.Close();
 }
}

Wie wird diese Klasse verwendet?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TextDatei c_textdatei = new TextDatei();
 
//Einlesen einer Datei
string fs = c_textdatei.ReadFile(@"c:\text.txt");
 
//Schreiben einer Datei
c_textdatei.WriteFile(@"C:\text.txt", "Hallo Welt!");
 
//Text an eine Datei Anhängen
c_textdatei.Append(@"C:\text.txt", "Hallo Welt!");
 
//Zeilen einer Datei ersetzen
c_textdatei.WriteLine(@"C:\text.txt", 2, "neuer Text für diese Zeile", true);
 
//Zeilen einer Datei ersetzen
c_textdatei.WriteLine(@"C:\text.txt", 2, "eine eingefügte Zeile", false);



Tags: ,