2010-01-11 16 views
10

Hallo Ich arbeite an etwas, und ich muss in der Lage sein, Text in eine TXT-Datei hinzuzufügen. Obwohl ich dies abgeschlossen habe, habe ich ein kleines Problem. Ich muss die Zeichenfolge in der Mitte der Datei mehr oder weniger schreiben. Beispiel:Hinzufügen einer Zeile in der Mitte einer Datei mit .NET

Hello my name is Brandon, 
I hope someone can help, //I want the string under this line. 
Thank you. 

Hoffentlich kann jemand mit einer Lösung helfen.

Edit Alles klar, Leute, ich werde versuchen, es herauszufinden, wahrscheinlich nur die ganze Datei neu schreiben. Gut, das Programm, das ich mache, ist mit der hosts-Datei verwandt, und nicht jeder hat die selbe hosts-Datei, also habe ich mich gefragt, ob es eine Möglichkeit gibt, ihre hosts-Datei zu lesen und die ganze zu kopieren ?

+0

Wussten Sie, dass 'StreamWriter' ein Teil von ist?NET, und nicht Teil der Programmiersprache C#? –

Antwort

13

Mit normalen Dateien gibt es keinen Weg darum herum - Sie müssen den Text lesen, der der Zeile folgt, an die Sie später anhängen möchten, die Datei überschreiben und dann den ursprünglichen nachgestellten Text anhängen.

Denken Sie an Dateien auf der Festplatte als Arrays - wenn Sie einige Elemente in der Mitte eines Arrays einfügen möchten, müssen Sie alle folgenden Elemente nach unten verschieben, um Platz zu schaffen. Der Unterschied ist, dass .NET bequeme Methoden für Arrays und Lists bietet, die dies einfach machen. Die Datei-I/O-APIs bieten soweit ich weiß, keine solchen Bequemlichkeits-Methoden.

Wenn Sie im Voraus wissen, dass Sie in der Mitte einer Datei einfügen müssen, ist es oft einfacher, einfach eine neue Datei mit dem geänderten Inhalt zu schreiben und dann eine Umbenennung durchzuführen. Wenn die Datei klein genug ist, in den Speicher zu lesen, können Sie mit etwas LINQ dies ganz einfach tun:

var allLines = File.ReadAllLines(filename).ToList(); 
allLines.Insert(insertPos, "This is a new line..."); 
File.WriteAllLines(filename, allLines.ToArray()); 
2

prüfen File.ReadAllLines() aus. Wahrscheinlich der einfachste Weg.

 string[] full_file = File.ReadAllLines("test.txt"); 
    List<string> l = new List<string>(); 
    l.AddRange(full_file); 
    l.Insert(20, "Inserted String"); 
    File.WriteAllLines("test.txt", l.ToArray()); 
0

Wenn Sie den Zeilenindex kennen, verwenden Sie readLine, bis Sie diese Zeile erreichen und darunter schreiben. Wenn Sie genau wissen, dass der Text dieser Zeile dasselbe ist, vergleichen Sie den von readLine zurückgegebenen Text mit dem gesuchten Text und schreiben Sie dann unter diese Zeile.

Oder Sie können nach dem Index einer angegebenen Zeichenfolge suchen und danach mit der Escape-Sequenz \ n schreiben.

0

Wie bereits erwähnt, gibt es keine Möglichkeit, die Datei nach dem Punkt des neu eingefügten Textes neu zu schreiben, wenn Sie bei einer einfachen Textdatei bleiben müssen. Abhängig von Ihren Anforderungen ist es jedoch möglich, das Finden des Standorts zu beschleunigen, um mit dem Schreiben zu beginnen. Wenn Sie wüssten, dass Sie Daten nach Zeile N hinzufügen müssen, können Sie einen separaten "Index" der Offsets der Zeilennummern pflegen. Das würde es dir ermöglichen, direkt an den notwendigen Ort zu suchen, um mit dem Lesen/Schreiben zu beginnen.

2

einer der Trick ist Dateitransaktion. Zuerst lesen Sie die Datei bis zu der Zeile, der Sie Text hinzufügen möchten, aber während des Lesens speichern Sie die gelesenen Zeilen in einer separaten Datei, zB tmp.txt und fügen Sie dann den gewünschten Text zur tmp.txt hinzu (am Ende der Datei) danach das Lesen von der Quelldatei bis zum Ende fortsetzen. Ersetzen Sie dann die Datei tmp.txt durch die Quelldatei. Am Ende hast du Datei mit hinzugefügtem Text in der Mitte :)

5

Dies ist die beste Methode, um einen Text in der Mitte der Textdatei einzufügen.

string[] full_file = File.ReadAllLines("test.txt"); 
List<string> l = new List<string>(); 
l.AddRange(full_file); 
l.Insert(20, "Inserted String"); 
File.WriteAllLines("test.txt", l.ToArray()); 
Verwandte Themen