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



我正在尝试逐字节复制exe文件。我比较了2的十六进制文件,它们非常不同。似乎有些值没有加载到中

#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;
            }
        }
    }
}

为什么用单个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)
    );
}

甚至只是:

#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();
}

没有混乱,没有大惊小怪!

在一般情况下,这对流非常有效,但是,如果你只想执行一个字节对字节的文件复制,你应该让你的操作系统为你做这件事。它可以做得比你快得多!例如,Windows上的CopyFile

感谢您的帮助。这就是我完成这项工作的原因。

#include <iostream>     
#include <fstream>      
using namespace std;
int main() {
    ifstream is("file.exe", ios::binary);
    ofstream fs("newfile.exe", ios::binary);
    if (is) {
        is.seekg(0, is.end);
        int length = is.tellg();
        is.seekg(0, is.beg);
        char * buffer = new char[length];
        is.read(buffer, length);
        is.close();
        for (int i = 0; i < length; i++) {
            fs << buffer[i];
        }
        delete[] buffer;
    }
}

相关内容

  • 没有找到相关文章

最新更新