ViktorProphet
ViktorProphet
2015-12-14 12:29
采纳率: 60%
浏览 1.4k

C++读写文件遇到问题,无法使用stream准确复制exe格式的二进制文件

使用的代码如下:
其中:a是buffer,格式为char,栈数组(堆数组我也试过会出现同样的问题)
length_of_file是之前设定的要写入文件的长度

void MainProcessor::write()
{
std::cout << "Your new locked_file_name?(*.*)" << std::endl;
std::cin >> lock_it_file_name;
std::ofstream out(lock_it_file_name);
if (out.is_open())
{
for (int i = 0; i != length_of_file; i++)
out.write((char*)&a[i], sizeof(char));
out.close();
}
}
输入输出两个文件的出现错误的位的16进制对比如下
VS中的出现问题的位置:下标118
VS中的出现问题的位置:下标118
UE中的文件对比
源文件为B1-B.exe
源文件
复制之后的文件为asd.txt
复制之后的文件
可以明显的看出来,在70h-7的位置,出现了问题,向后偏移了一位,但是我在代码中是没有偏移的
单纯的write的方法也试过了,是会出现同样的问题的
具体的两个文件由于无法上传,所以请看以下的地址:
外部链接,两个文件的资源
还请各位大神帮忙解决问题!这个问题困扰了好久了!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • qq_27183003
    ysuwood 2015-12-14 12:55
    已采纳

    ofstream 缺省是以文本格式打开文件,你用的write是二进制格式,所以你应该改为二进制格式打开:

        std::ofstream out(lock_it_file_name,std::ios::binary);
    
    
    点赞 评论
  • qq_27183003
    ysuwood 2015-12-14 12:49
    a[i]是什么类型?
    
     out.write((char*)&a[i], sizeof(char));
    
    点赞 评论

相关推荐