Я новичок в C++, и я должен выполнить задание для школы.C++ ifstream/fstream повреждающие данные
Мне нужно скопировать двоичный файл без использования вызовов api или системных интегрированных команд. В школе мы используем машину для окон.
Я искал вокруг немного, и я узнал, что лучший способ для копирования данных без использования какой-либо API, чтобы использовать iostream (ifstream/fstream) Вот код, я использую:
int Open(string Name){
int length;
char * buffer;
ifstream is;
fstream out;
FILE* pFile;
is.open (Name.c_str(), ios::binary);
// get length of file:
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);
// allocate memory:
buffer = new char [length];
// read data as a block:
is.read (buffer,length);
is.close();
pFile = fopen ("out.exe" , "w");
fclose(pFile);
out.open("out.exe", ios::binary);
out.write(buffer, length);
out.close();
delete[] buffer;
return 0;
}
out.exe разве работает должным образом, и после того, глядя на него в winhex.exe я вижу, что данные были modefied, в то время как я с этим ничего
Может кто-нибудь мне помочь не делать?
* файл является простым привет мира программы, она MessageBoxes "привет мира"
EDIT:
Извините за мою невосприимчивость, он спит. В любом случае, я открыл обе (исходные и исходные) программы в шестнадцатеричном редакторе. Кажется, что все, что я пытаюсь эту строку:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000200 4C 00 00 00 00 30 00 00 00 02 00 00 00 0D 0A 00 L 0
Изменения в это:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000200 4C 00 00 00 00 30 00 00 00 02 00 00 00 0A 00 00 L 0
Как вы можете или не можете увидеть каким-то образом в процессе чтения или записи байта удаляется (или добавляется , что иногда также бывает)
Вы пробовали посмотреть полученный файл в шестнадцатеричном редакторе, чтобы узнать, где он поступил неправильно? Или копировать, скажем, текстовый файл, который будет проще сравнивать? –
Какие проблемы у вас есть? Что происходит со случайным фоном в середине вашей функции? – stonemetal
Как это изменить? Как выход отличается от входа? –