我是C++的新手,我必須爲學校做一項任務。C++ ifstream/fstream損壞數據
我需要在不使用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 看着它後,我看到數據已經modefied,而我沒有做任何事的
誰能幫助我?
*文件是一個簡單的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
,你可以或在讀取或寫入過程字節被刪除無法看到以某種方式(或增加,有時也會發生)
您是否試過在十六進制編輯器中查看結果文件以查看它出錯的位置?或者複製一個文本文件,比較容易? – 2010-11-16 20:39:45
你有什麼樣的問題?在函數中間隨機打開了什麼? – stonemetal 2010-11-16 20:42:27
它是如何修改的?輸出與輸入有什麼不同? – 2010-11-16 20:43:18