我是 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”
编辑:
对不起,我的反应迟钝,它正在睡觉。无论如何,我已经在十六进制编辑器中打开了两个(结果和原始)程序。似乎我尝试了这条线:
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
正如您在读取或写入过程中可以或看不到的那样,一个字节正在被删除(或添加,有时也会发生)