Frage

Ich öffne eine Datei und bekomme einen Qtextstream davon. Ich lese dann die Stream -Zeile per Linie mit Readline (). Wenn die Linie mit einer bestimmten Zeichenfolge übereinstimmt, muss ich sie durch eine andere Zeichenfolge ersetzen. Ich brauche das Verhalten, dass die Zeile vollständig ersetzt wird (dh, wenn die Zeile "Langwort" war und ich sie durch "Wort" ersetze, sollte die Zeile "Wort" und "Wort" nur) enthalten.

Im Moment benutze ich seeee () und dann den << Operator, um meine Zeichenfolge an dem angegebenen Ort einzulegen, aber die Überreste der letzten Zeichenfolge bleiben bleiben, sodass ich so etwas wie "Wortwort" übrig bleibt. Wie kann ich verhindern und sicherstellen, dass die gesamte vorherige Zeile vollständig durch mein neues ersetzt wird?

War es hilfreich?

Lösung

Meines Wissens können Sie nicht einfach einen Teil einer Textdatei an der Stelle entfernen. Wenn die Ersatzzeichenfolge identisch war, können Sie diese genauen Bytes möglicherweise ersetzen, und wenn sie kürzer wäre, können Sie möglicherweise das Problem umgehen, indem Sie den leeren Raum mit Nulls füllen.

Wenn Sie dies nicht wollten, müssten Sie eine neue Datei erstellen, jede Zeile aus der alten Datei lesen, alle erforderlichen Änderungen an dieser Zeile im Speicher vornehmen und diese Zeile in die neue Datei schreiben. Sobald dies abgeschlossen ist, können Sie die Originaldatei durch die neue Datei ersetzen.

Wenn es möglich wäre, Stücke zu/aus der Datei hinzuzufügen/zu entfernen, würden Sie höchstwahrscheinlich eine erheblich fragmentierte Datei auf der Festplatte erhalten. Wenn Sie mehr Zeichen einfügen müssten, müssten zusätzliche Fragmente erstellt werden, da die neuen Daten einfach nicht in die Menge an Platz passen konnten, die von den alten Daten besetzt sind, und das Entfernen von Daten Löcher in der Datei hinterlassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top