1

使用 C++ 的<fstream>,很容易复制一个文本文件:

#include <fstream>

int main() {
    std::ifstream file("file.txt");
    std::ofstream new_file("new_file.txt");

    std::string contents;
    // Store file contents in string:
    std::getline(file, contents);
    new_file << contents; // Write contents to file

    return 0;
}

但是,当您对可执行文件执行相同操作时,输出的可执行文件实际上并不起作用。也许 std::string 不支持编码?

我希望我可以执行以下操作,但文件对象是一个指针,我无法取消引用它(运行以下代码会创建 new_file.exe,它实际上只包含某些东西的内存地址):

std::ifstream file("file.exe");
std::ofstream new_file("new_file.exe");

new_file << file;

我想知道如何做到这一点,因为我认为这在 LAN 文件共享应用程序中是必不可少的。我确信有更高级别的 API 用于使用套接字发送文件,但我想知道这些 API 是如何工作的。

我可以逐位提取、存储和写入文件,因此输入和输出文件之间没有差异吗?感谢您的帮助,非常感谢。

4

2 回答 2

7

不知道为什么 ildjarn 发表评论,但要让它成为答案(如果他发布答案,我将删除它)。基本上,你需要使用无格式的读写。getline格式化数据。

int main()
{
    std::ifstream in("file.exe", std::ios::binary);
    std::ofstream out("new_file.exe", std::ios::binary);

    out << in.rdbuf();
}

从技术上讲,operator<<用于格式化数据,除非像上面那样使用它。

于 2012-09-12T00:24:49.267 回答
2

用非常基本的术语:

using namespace std;

int main() {
    ifstream file("file.txt", ios::in | ios::binary );
    ofstream new_file("new_file.txt", ios::out | ios::binary);

    char c;
    while( file.get(c) ) new_file.put(c);

    return 0;
}

虽然,您最好制作一个 char 缓冲区并使用ifstream::read/ofstream::write一次读取和写入块。

于 2012-09-12T00:27:07.140 回答