Wie kann ich Daten in einer Datei teilweise ändern

Heinz Koeck 100 Zuverlässigkeitspunkte
2024-03-01T18:26:38.2466667+00:00

Hallo Forum,

ich brauche eine Datei mit mehreren logischen Sätzen aus integer- und string-Werten. Dann möchte ich einzelne Werte der Sätze in der Datei ändern. Zu Testzwecken habe ich es mit string-Daten probiert wie in den nachstehenden Funktionen.

Wenn ich nun einen Wert überschreiben will, (z.B: ab Byte 12 in der Länge 6) steht dann in der Datei bis zum Byte 12 lauter Nullen, dann der zu ersetzende Text und der Rest der Daten ist weg. Was muss ich tun damit das funktioniert?

int writeBinaryFile(string path, string& s, int firstByte) {   int lastByte = -1;                              //nächstes Byte od Fehler: -1   ofstream f(path, ios::binary);   if (f) {     f.seekp(firstByte);     f.write((char*)s.c_str(), s.length());     if (f) {       lastByte = f.tellp();       f.close();       return lastByte;     }   }   System::Windows::Forms::MessageBox::Show("(writeBinaryFile) Schreib-Fehler!");   f.close();   return lastByte; } /// end func writeBinaryFile  int readBinryFile(string path, string& s, int firstByte) {   int lastByte = -1;   ifstream f(path, ios::binary);   if (f) {     f.seekg(firstByte);     f.read(&s[12], 6);   }   return lastByte; }

Visual Studio
Visual Studio
Eine Familie von Microsoft-Sammlungen integrierter Entwicklungstools zum Erstellen von Anwendungen für Windows, das Web und mobile Geräte.
37 Fragen
C++
C++
Eine hochentwickelte, allgemeine Programmiersprache, die als Erweiterung der Programmiersprache C entwickelt wurde und neben den Möglichkeiten der Speicherbearbeitung auf untergeordneter Ebene auch objektorientierte, generische und funktionale Features bietet.
17 Fragen
{count} Stimmen

1 Antwort

Sortieren nach: Am hilfreichsten
  1. Dimitar Denkov 1,665 Zuverlässigkeitspunkte
    2024-03-03T19:42:34.39+00:00

    Hallo Heinz,

    Besteht die Datei aus mehreren Zeilen ('\n')? Das Ergebnis kann in diesem Fall vom erwarteten abweichen, wie dieser Thread zeigt:

    https://stackoverflow.com/questions/44291635/ifstreamseekg-giving-wrong-results

    Würdest Du probeweise den booleschen Ausdruck ios::in | ios::binary als zweiten Parameter an den ifstream-Konstruktor übergeben (siehe dazu die Anmerkung im oben verlinkten Thread)?

    Gruß,

    Dimitar


Ihre Antwort

Fragesteller*innen können Antworten als akzeptierte Antworten markiert werden, wodurch Benutzer*innen wissen, dass diese Antwort das Problem gelöst hat.