2017-10-12 91 views
2

我最近一直在努力学习更多关于通过字节复制文件,但我遇到了麻烦。当检查原始notepad.exe对notepad2.exe的字节时,即使fread和frwite的大小在读写时是一致的,我也会得到不同的结果。如何正确复制一个字节的可执行字节

typedef unsigned char BYTE; 
FILE* file; 
FILE* ofile; 

file = fopen("notepad.exe", "rb"); 

fseek(file, 0, SEEK_END); 
long fSize = ftell(file); 
rewind(file); 

BYTE* ret = new BYTE[fSize]; 

fread(ret, 1, fSize, file); 

fclose(file); 

ofile = fopen("notepad2.exe", "w"); 
fwrite(ret, 1, fSize, ofile); 

fclose(ofile); 

我可能在错误的假设下,它甚至可以这样工作,我对使用较低级别的内存操作相当陌生。感谢前面的帮助人。

+0

会碰到一次,让它死亡,让我知道如果任何人有一个解决方案。原始exe文件是256kb重写的一个是257kb并且不能打开 – Wilky

回答

1

下载一个免费的十六进制编辑器并在那里直观地检查两个文件的字节。这会让你更容易看到你出错的地方。

显然你有一些额外的字节(可能很多00值),但是......它是在复制文件字节的前端还是后端?

  • 检查的Fsize值和ret长度(fwrite前检查),
    均符合预期的数额?

  • 相反的:ofile = fopen("notepad2.exe", "w");
    尝试设置为:
    ofile = fopen("notepad2.exe", "wb");

  • 使用whilefor回路阅读ret写每一个字节/追加相同的值磁盘文件中的字节(notepad2.exe)。

+0

工作没有以二进制模式写回,很容易错过谢谢你的答案。 – Wilky

相关问题