Was ist der BESTE Weg, um ersetzen von text in eine Datei mit C# / .NET?
Ich habe eine text-Datei, die geschrieben wird als Teil eines sehr großen Datenmengen zu extrahieren. Die erste Zeile der text-Datei ist die Anzahl der "Konten" extrahiert.
Aufgrund der Natur dieser Extrakt, diese Zahl ist nicht bekannt, bis zum Ende des Prozesses, aber die Datei kann groß sein (ein paar hundert MB).
Was ist der BESTE Weg in C# /.NET, um eine Datei zu öffnen (in diesem Fall eine einfache text-Datei), und ersetzen Sie die Daten, die in der ersten "Zeile" der text?
WICHTIGER HINWEIS: - ich brauche nicht zu ersetzen, eine "Feste Anzahl von bytes" -, dass es einfach sein würde. Das problem hier ist, dass die Daten, die aufgenommen werden muss am Anfang der Datei ist variabel.
WICHTIGER HINWEIS 2: - EIN paar Leute haben gefragt, über /erwähnt einfach das halten der Daten im Speicher und dann ersetzen... aber das ist völlig aus der Frage. Der Grund, warum dieser Prozess wird aktualisiert, ist aufgrund der Tatsache, dass es manchmal Abstürze beim laden ein paar gigs in den Speicher.
- "#####\r\n (also kein padding)" sind Sie sicher, dass Sie nicht haben eine führende Null?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie können, sollten Sie einen Platzhalter einzufügen, die Sie überschreiben am Ende mit der tatsächlichen Anzahl und Räume.
Wenn das keine option ist, schreiben Sie Ihre Daten in eine cache-Datei zuerst. Wenn Sie wissen, dass die tatsächliche Anzahl erstellen Sie die Ausgabe-Datei und fügen Sie die Daten aus dem cache.
BESTE ist sehr subjektiv. Für jede kleinere Datei, können Sie ganz einfach öffnen Sie die gesamte Datei in den Speicher und ersetzen Sie, was Sie möchten, mit einem string ersetzen und dann wieder die Datei schreiben.
Sogar für große Dateien, es wäre nicht schwer, in den Speicher laden. In den Tagen des multi-gigs Arbeitsspeicher, ich würde Hunderte von megabytes, die noch leicht in Erinnerung.
Haben Sie getestet, dieser naive Ansatz? Haben Sie gesehen, ein echtes Problem mit ihm?
Ist dies eine wirklich große Datei (GB Größe), ich würde schriftlich alle Daten zuerst in eine temp-Datei und schreiben Sie dann die richtige Datei mit dem header-Linie, die in der ersten und dann anfügen, den rest der Daten. Da ist es nur text wäre, würde ich wahrscheinlich einfach shell out zu DOS:
Sind Sie sicher?
Wenn Sie schreiben, eine große Nummer auf der ersten Zeile der Datei (UInt32.MaxValue oder UInt64.MaxValue), dann, wenn Sie die richtige tatsächliche Zahl, die Sie ersetzen können, die Anzahl der bytes, die mit der richtigen Nummer, aber Links mit Nullen aufgefüllt, so ist es immer noch ein Gültiger integer ist.
z.B.
Scheint mir, wenn ich die Frage verstehen, richtig?
Was ist der BESTE Weg in C# /.NET, um eine Datei zu öffnen (in diesem Fall eine einfache text-Datei), und ersetzen Sie die Daten, die in der ersten "Zeile" der text?
Wie über die Platzierung an den Anfang der Datei ein token {UserCount} wenn Sie zum ersten mal erstellt.
Dann verwenden TextReader Lesen Sie die Datei zeilenweise ein. Wenn es die erste Zeile Aussehen für {UserCount} und ersetzen durch Ihren Wert. Schreiben Sie jede Zeile, die Sie Lesen, in mit TextWriter
Beispiel:
Wenn die extrahierte Datei ist nur ein paar hundert Megabyte, dann können Sie ganz einfach halten Sie alle text im Speicher, bis die Extraktion abgeschlossen ist. Dann, Sie können schreiben Sie Ihre Ausgabe-Datei als letzten Vorgang, beginnend mit der Anzahl der Datensätze.
Ok, früher habe ich vorgeschlagen, ein Ansatz, besser wäre, wenn der Umgang mit vorhandenen Dateien.
Jedoch in Ihrer situation, die Sie möchten, um die Datei zu erstellen und während des create-Prozesses gehen zurück an den Anfang und schreiben Sie die Anzahl der Nutzer ist. Diese wird, genau das zu tun.
Hier ist ein Weg, es zu tun, die verhindert, dass Sie mit schreiben der temporären Datei.