Я новичок в C ++ и должен выполнить задание для школы.
Мне нужно скопировать двоичный * файл без использования API-вызовов или системных интегрированных команд. В школе мы используем машину Windows.
Я немного обыскал и обнаружил, что лучший способ скопировать данные без использования 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
Я вижу, что данные были отредактированы, пока я ничего с ними не делаю
Кто-нибудь может мне помочь?
* файл представляет собой простую программу hello world, он содержит сообщения "hello world"
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
Как вы можете или не можете видеть каким-либо образом в процессе чтения или записи, байт удаляется (или добавляется, что иногда случается также)