In meinem Projekt ist es notwendig, in Binärdatei zu lesen und zu schreiben, im Grunde Serialisierung verknüpfter Listen in einer Datei, in der ich den Wert speichern Binärformat und erinnere mich an die TIPP()/Tellg() Offset, wie auch immer, ich kann das nicht tun. Dadurch werden alle darin enthaltenen Inhalte auf Null gelöscht und anstelle des Einfügens wird der aktuelle Inhalt zurückgeschoben.Überschreiben kann nicht an einer bestimmten Stelle in einer Datei. Überschreiben an einer bestimmten Stelle löscht alle Inhalte davor und verschiebt den Wert danach
Zum Beispiel, im folgenden Programm, öffne ich eine Datei, schreibe Werte sagen 1,120,323. Dann schließe es und lies es, es zeigt die exakt richtigen Werte 1.120.323. Aber wenn ich versuche, den Wert von 120-> 220 zu ersetzen, wird 1 zu Null und der Wert wird als 0 220 220 gelesen. Im Grunde schreibt und schiebt 220 über 323 zurück.
#include <iostream>
#include <fstream>
#include <cstdlib>
int main() {
std::cout<<"File Ofstream Testing "<<std::endl;
const char * file_name = "Test_File.bin";
int ONE = 1;
int ZERO = 0;
int ONE_TWENTY = 120;
int TWO_TWENTY = 220;
int THREE_TWENTY_THREE = 323;
int THREE_FORTY_FIVE = 345;
//---------------------------------------------------------------------------
{
std::ofstream file_write(file_name, std::ios::out|std::ios::binary);
if(!(file_write.is_open())) {
std::cout<<"File cannot be opened "<<std::endl;
exit(0);
}
file_write.seekp(0);
file_write.write((char *)&ONE,sizeof(int));
file_write.write((char *)&ONE_TWENTY,sizeof(int));
file_write.write((char *)&THREE_TWENTY_THREE,sizeof(int));
file_write.close();
}
//---------------------------------------------------------------------------
{
std::ifstream file_read(file_name,std::ios::in|std::ios::binary);
if(!(file_read.is_open())) {
std::cout<<"File cannot be opened "<<std::endl;
exit(0);
}
int temp;
file_read.seekg(0);
file_read.read((char *)&temp,sizeof(int));
std::cout<<"Temp "<<temp<<std::endl;
file_read.read((char *)&temp,sizeof(int));
std::cout<<"Temp "<<temp<<std::endl;
file_read.read((char *)&temp,sizeof(int));
std::cout<<"Temp "<<temp<<std::endl;
file_read.close();
}
//---------------------------------------------------------------------------
{
std::ofstream file_write(file_name, std::ios::out|std::ios::binary);
if(!(file_write.is_open())) {
std::cout<<"File cannot be opened "<<std::endl;
exit(0);
}
file_write.seekp(sizeof(int));
file_write.write((char *)&TWO_TWENTY,sizeof(int));
file_write.seekp(sizeof(int) + sizeof(int));
file_write.write((char *)&THREE_FORTY_FIVE,sizeof(int));
file_write.close();
}
//--------------------------------------------------------------------------
{
std::ifstream file_read(file_name,std::ios::in|std::ios::binary);
if(!(file_read.is_open())) {
std::cout<<"File cannot be opened "<<std::endl;
exit(0);
}
int temp;
file_read.seekg(0);
file_read.read((char *)&temp,sizeof(int));
std::cout<<"Temp "<<temp<<std::endl;
file_read.seekg(sizeof(int));
file_read.read((char *)&temp,sizeof(int));
std::cout<<"Temp "<<temp<<std::endl;
file_read.seekg(sizeof(int) + sizeof(int));
file_read.read((char *)&temp,sizeof(int));
std::cout<<"Temp "<<temp<<std::endl;
file_read.close();
}
//--------------------------------------------------------------------------------
return 0;
}//fn:main
Eigentlich habe ich versucht, Datei in fstream zu öffnen, wie Sie erwähnt haben, aber jedes Mal sagt er Datei nicht geöffnet werden kann, wenn ich für file.is_open überprüfen(). Gibt es ein Problem in der Art, wie ich öffne? – howtechstuffworks
std :: fstream-Datei (Dateiname, std :: ios :: in | std :: ios :: out | std :: ios :: binary); if (! File.is_open()) { std :: cout << "Datei kann nicht geöffnet werden, Beenden ...." << std :: endl; Ausgang (0); } – howtechstuffworks
Ich habe es versucht, und es funktioniert. Ich bekomme 1, 220, 345 als Ausgabe. Stellen Sie sicher, dass die vorherigen Streams geschlossen sind, bevor Sie versuchen, dieselbe Datei mit einem anderen Stream zu öffnen. – jrok