gpt4 book ai didi

C++ ifstream/fstream 破坏数据

转载 作者:行者123 更新时间:2023-11-28 01:09:25 24 4
gpt4 key购买 nike

我是 C++ 的新手,我要为学校做作业。

我需要在不使用 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 中查看后我看到数据已经修改,但我没有对它做任何事情

谁能帮帮我?

*该文件是一个简单的 hello world 程序,它的消息框是“hello world”

编辑:

抱歉我 react 迟钝,它正在 sleep 。无论如何,我已经在十六进制编辑器中打开了两个(结果和原始)程序。似乎我尝试了这一行的一切:

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

正如您在读取或写入过程中以某种方式可以看到或看不到的那样,一个字节被删除(或添加,有时也会发生)

最佳答案

ios_base::binary 传递给fstream 的构造函数未指定(in 和/或out 也必须提供)。

为避免这种情况,您可以使用 ofstream(注意前一个“o”)作为 out 而不是 fstream。作为奖励,这将避免需要首先使用“w”标志的 fopen,因为 ofstream 的 ctor 默认创建文件。

关于C++ ifstream/fstream 破坏数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4198683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com