2017-10-12 90 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

相關問題