Erstes Zeichen einer Datei ändern
-
Wie kann ich das erste Zeichen einer Datei ändern?
//in Datei Speichern string file = dir+"\\termine.dat"; ofstream stream(file.c_str(),ios::app|ios::binary); if(stream) { stream<<boolalpha <<a<<endl<<titel<<endl <<klasse<<endl <<typ<<endl <<vorlauf<<endl <<periode<<endl <<vornHinten<<endl <<keep<<endl <<merken<<endl <<ende<<endl; }
Wenn a jetzt "1" oder "0" ist, wie kann ich das ändern. Wenn ich einfach so mit stream.seekp(0) den Cursor setzte und dann schreibe steht in der Datei nur noch "0" oder "1". Ich möchte eigendlich nich jedesmal die ganze Datei neu schreiben
-
Hallo,
das kommt ein bischen darauf an, was du genau willst.Wenn die Datei z.B. existiert und du immer nur das erste Zeichen eines neuen Datensatzes ändern willst, dann geht das so:
// Datei muss existieren : ios::in | ios::out // Beim öffnen ans Ende der Datei gehen : ios::ate ofstream file ("aendern.txt", ios::in|ios::out|ios::ate); if (file) { // Position merken an der wir mit dem Schreiben beginnen std::streampos pos = file.tellp(); bool b = false; file << b << "Hallo Welt" << endl; file << "Wie geht's so?" << endl; // an den Anfang des Datensatz gehen file.seekp(pos, ios::beg); // und neuen Wert schreiben file << !b; }
Wenn hingegen die Datei nicht existiert bzw. immer wieder neu geschrieben werden soll, geht's so:
ofstream file ("aendern.txt"); if (file) { bool b = false; file << b << "Hallo Welt" << endl; file << "Wie geht's so?" << endl; file.seekp(0, ios::beg); file << !b; }
Und kombiniert:
std::streampos pos; ofstream file; file.open("aendern.txt", ios::in|ios::out|ios::ate); // Falls Datei existiert, neuen Datensatz anhängen. if (file.is_open()) { pos = file.tellp(); } else { // Sonst Datei erzeugen file.clear(); file.open("aendern.txt", ios::out); assert(file.is_open()); pos = file.tellp(); } // Jetzt ganz normal weiter bool b = false; file << b << "Hallo Welt" << endl; file << "Wie geht's so?" << endl; file.seekp(pos, ios::beg); file << !b;