我是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