C++或者C编写一个能复制任何二进制文件的程序,但是根本写不出来,求大神

问题是很简单啦,虽然看起来简单,想起来简单,但是但是整整用起来的时候发现根本无法实现。无论是用C++的fstream中的文件流,还是用C的stdlib的FILE都不行,exe文件可以打开,可以复制,但是复制之后的文件还有复制之前的文件内容根本不一样,现在贴上来的是主要的代码,用的是ifstream的,FILE我也试过了,同样没有用,而且,复制出来的结果比不上这个完整

void MainProcessor::read()
{
std::cout << " Please Insert File Name(*.*) " << std::endl;
std::cin >> file_name;
std::ifstream in;
in.open(file_name, std::ios::binary | std::ios::in | std::ios::app, _SH_DENYNO);
in.read((char*)a, 100000000);
int b = in.gcount();
if (length_of_file > b)
{
length_of_file = b;
}
if (b == 0)
{
std::cout << "No such file or the file is empty,try again" << std::endl;
is_read_file = false;
}
else
{
std::cout << "Read Success!" << std::endl;
is_read_file = true;
std::cout << std::endl;
std::cout << "There are " << b << "chars in the file" << std::endl;
std::cout << std::endl;
}
in.close();
}
这里是读入文件
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())
{
out.write((char*)a, (length_of_file)*sizeof(char));
out.close();
} std::ifstream in;
in.open(lock_it_file_name, std::ios::binary | std::ios::in | std::ios::app, _SH_DENYNO);
in.read((char*)compare, 100000000);
int b = in.gcount();
}
上面是写入的文件
这里是调试的时候可以看见的,很明显到这里就出现了区别,当然问题还不止这点

在附件上由我复制之前(B1-B.txt,是exe文件,为了防止风险,特意改成txt文件,更改后缀名之后便可以打开),后面的是复制之后的文件(asd.txt,同上)

文件无法添加到附件,还请各位劳心到百度盘去下载一下

两个文件

我是调试了好长时间无论如何调试不出来了- -,求大神帮助啊!

用ultraedit等16进制编辑器打开看下,对照下。

其实如果只是单纯的想要复制一个文件的话,不妨试试DOS命令COPY 和XCOPY,再C++里面可以使用
system(“DOS”);// DOS为Dos命令,需要具体致命命令极其参数

如果楼主是想练语法的话我帮不上你,我对FILE和fstream也不熟悉

图片说明图片说明
B1的是源文件,asd是后拷贝的文件

把不同的贴出来,你贴的这个都相同啊。

图片说明
图片说明
这回不一样了吧

哪一个是原始文件?

大概问题你也应该看出来了,后面文件指针的计算,向前还是向后偏了一个字节。

std::ofstream out(lock_it_file_name);明显不是二进制打开么