2010-01-16 7 views
14

Ich versuche, Daten aus einer Textdatei zu lesen, zu löschen und dann in dieser Reihenfolge in der Reihenfolge fstream zu schreiben.Aus Datei lesen, löschen, darauf schreiben

Meine Frage ist, wie man eine Datei löscht, nachdem sie davon gelesen hat. Ich weiß, dass ich eine Datei öffnen und gleichzeitig löschen kann, aber gibt es eine Funktion, die ich im Stream aufrufen kann, um den Inhalt zu löschen?

Antwort

15

Sie sollten es öffnen, Ihre Eingabeoperationen ausführen, und dann schließen Sie es und öffnen Sie es erneut mit dem festgelegten Flag std :: fstream :: trunum.

#include <fstream> 

int main() 
{ 
    std::fstream f; 
    f.open("file", std::fstream::in); 

    // read data 

    f.close(); 
    f.open("file", std::fstream::out | std::fstream::trunc); 

    // write data 

    f.close(); 

    return 0; 
} 
4

Wenn Sie absolut sicher im Falle eines Unfalls oder einer anderen katastrophales Ereignis sein wollen, sollten Sie den Schreibvorgang in eine zweite, temporäre Datei tun. Wenn Sie fertig sind, löschen Sie die erste Datei und benennen Sie die temporäre Datei in die erste Datei um. Informationen dazu finden Sie in der Bibliothek Boost Filesystem.

+0

So gemacht, gibt es immer noch eine Lücke zwischen dem Löschen und dem Umbenennen. In UNIX-Dateisystemen sollten Sie fsync, das Löschen überspringen und nur die temporäre Datei über die erste Datei umbenennen; es wird atomar ersetzt werden. Unter Windows verfügt NTFS über eine spezielle ReplaceFile-Funktion. atomare Ersetzungen sind auf anderen Dateisystemen AFAIK nicht möglich. – ephemient