我最近一直试图了解更多关于通过字节复制文件的信息,但我遇到了麻烦。检查原始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 :(得分:1)
下载免费的十六进制编辑器并直观地查看这两个文件'那里的字节。这样可以更容易地查看出错的地方。
显然你有一些额外的字节(可能有很多00
个值),但......是复制文件字节的前面还是后面?
检查Fsize
的值,ret
的长度(fwrite
之前检查),
是否与预期金额相符?
而不是:ofile = fopen("notepad2.exe", "w");
尝试设置为:
ofile = fopen("notepad2.exe", "wb");
使用while
或for
循环读取来自ret
的每个字节和写 / 将相同的值附加到磁盘文件(notepad2.exe)中的字节。