Mein Code bisher
StreamReader reading = File.OpenText("test.txt");
string str;
while ((str = reading.ReadLine())!=null)
{
if (str.Contains("some text"))
{
StreamWriter write = new StreamWriter("test.txt");
}
}
Ich weiß, wie ich den Text finde, aber ich habe keine Ahnung, wie ich den Text in der Datei durch meinen eigenen ersetzen soll.
c#
.net
io
streamreader
file-handling
Gewinnen Sie Coder
quelle
quelle
Antworten:
Lesen Sie den gesamten Dateiinhalt. Machen Sie einen Ersatz mit
String.Replace
. Schreiben Sie den Inhalt zurück in die Datei.quelle
Regex.Replace
System out of memory
Ausnahme geworfen .Es wird Ihnen schwer fallen, in dieselbe Datei zu schreiben, aus der Sie lesen. Ein schneller Weg ist, dies einfach zu tun:
Mit dem können Sie das besser auslegen
quelle
ReadAllText
schließt den Dateizugriff vorWriteAllText
. Ich benutze genau diese Technik in meiner eigenen App.Sie müssen alle Zeilen, die Sie gelesen haben, in die Ausgabedatei schreiben, auch wenn Sie sie nicht ändern.
Etwas wie:
Wenn Sie diesen Vorgang an Ort und Stelle ausführen möchten, ist es am einfachsten, eine temporäre Ausgabedatei zu verwenden und am Ende die Eingabedatei durch die Ausgabe zu ersetzen.
(Der Versuch, Aktualisierungsvorgänge in der Mitte einer Textdatei durchzuführen, ist ziemlich schwierig, da es schwierig ist, immer den gleichen Ersatz zu haben, da die meisten Codierungen eine variable Breite haben.)
BEARBEITEN: Anstatt zwei Dateivorgänge zum Ersetzen der Originaldatei zu verwenden, ist die Verwendung besser
File.Replace("input.txt", "output.txt", null)
. (Siehe MSDN .)quelle
Es ist wahrscheinlich, dass Sie die Textdatei in den Speicher ziehen und dann die Ersetzungen vornehmen müssen. Sie müssen die Datei dann mit der Methode überschreiben, die Sie genau kennen. Sie würden also zuerst:
Sie können dann den Text im Array durchlaufen und ersetzen.
Mit dieser Methode können Sie die Manipulationen steuern, die Sie ausführen können. Oder Sie können das Ersetzen nur in einer Zeile durchführen
Ich hoffe das hilft.
quelle
So habe ich es mit einer großen Datei (50 GB) gemacht:
Ich habe zwei verschiedene Möglichkeiten ausprobiert: die erste, das Einlesen der Datei in den Speicher und die Verwendung von Regex Replace oder String Replace. Dann habe ich die gesamte Zeichenfolge an eine temporäre Datei angehängt.
Die erste Methode eignet sich gut für einige Regex-Ersetzungen, aber Regex.Replace oder String.Replace können zu Speicherfehlern führen, wenn Sie viele Ersetzungen in einer großen Datei durchführen.
Die zweite Möglichkeit besteht darin, die temporäre Datei Zeile für Zeile zu lesen und jede Zeile manuell mit StringBuilder zu erstellen und jede verarbeitete Zeile an die Ergebnisdatei anzuhängen. Diese Methode war ziemlich schnell.
quelle
quelle
Ich neige dazu, einfachen Vorwärtscode so oft wie möglich zu verwenden. Der folgende Code hat bei mir gut funktioniert
quelle