Ich arbeite derzeit mit std::fstream
und haben die folgende Klasse: (Beachten Sie, dass die Datei auf Konstruktor geöffnet ist und nur während alle Lese-/Schreibvorgänge geöffnet bleiben soll schließen, wenn sie zerstört sind).Schreiben Sie in einen bereits geöffneten Filestream und entfernen Sie den Rest
MyFileClass
{
public:
MyFileClass(const std::string& file_name) { m_file.open(file_name) };
~MyFileClass() { m_file.close() };
bool read(std::string& content);
bool write(std::string& data);
private:
std::fstream m_file;
}
Jetzt habe ich einige Beispiel-Code:
MyFileClass sample_file;
sample_file.write("123456");
sample_file.write("abc");
Ergebnis wird „abc456“, weil, wenn der Strom geöffnet ist und wir mit truncate-Modus zu schreiben es immer an der Spitze schreiben wird, was zur Zeit ist da drin.
Was ich gerne haben würde, ist aufzuräumen jedes Mal, bevor wir so am Ende schreiben, ich werde nur das Neueste haben, in diesem Fall "abc".
Und das aktuelle Design ist, wenn die Datei nicht da ist, wird nur beim Schreiben erstellt, aber nicht beim Lesen (lesen wird Fehlercode zurückgegeben, wenn die Datei nicht vorhanden ist).
Meine Schreibfunktion ist:
bool
MyFileClass::write(const std::string& data)
{
m_file.seekg(0);
if (!m_file.fail())
{
m_file << data << std::flush;
}
return m_file.fail() ? true : false;
}
Gibt es eine Möglichkeit den aktuellen Inhalt der Datei zu löschen, bevor die Daten Spülung?
C++ bietet keine Möglichkeit, eine bereits geöffnete Datei zu kürzen. Siehe http://stackoverflow.com/questions/20809113/how-to-truncate-a-file-while-it-is-open-with-fstream – Barmar
Anders als das erneute Öffnen der Datei, nein. – UKMonkey