有人能告诉我为什么复制这样的文件不起作用?

Jle*_*end 0 c++ windows copy file

我试图逐字节复制exe文件.我比较了2的hex文件,它们是完全不同的.似乎有些值没有被加载..

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main(){

    ifstream fin("file.exe", ifstream::binary);
    vector<char> buffer(1, 0);


    ofstream newfile;
    newfile.open("newfile.exe", ios::binary);

    while (fin.read(buffer.data(), buffer.size())){
        streamsize s = fin.gcount();
        for (int i = 0; i < buffer.size(); i++){
            if (buffer[i] != EOF){
                newfile << buffer[i];
                cout << buffer[i] << endl;
            } else {
                break;
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 7

为什么你用一个单独读入和写出一个向量char?目的是s什么?为什么要尝试EOF与IOStreams 进行比较?这段代码似乎是C和C++的奇怪混合,结果完全被破坏了!

这是我如何做到的:

#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>

int main()
{
    std::ifstream fin ("file.exe",    std::ios::binary);
    std::ofstream fout("newfile.exe", std::ios::binary);

    std::copy(
       std::istream_iterator<char>(fin),
       std::istream_iterator<char>(),
       std::ostream_iterator<char>(fout)
    );
}
Run Code Online (Sandbox Code Playgroud)

甚至只是:

#include <iostream>
#include <fstream>

int main()
{
    std::ifstream fin ("file.exe",    std::ios::binary);
    std::ofstream fout("newfile.exe", std::ios::binary);

    fout << fin.rdbuf();
}
Run Code Online (Sandbox Code Playgroud)

没有麻烦,没有大惊小怪!

这对于一般情况下的流非常有效,但是,如果你想要做的就是执行逐字节文件副本,你就可以让你的操作系统为你完成.它可以比你快得多!例如,CopyFile在Windows上.

  • 甚至更简单:`newfile << fin.rdbuff();`在一行中. (2认同)