使用标准C ++的大型二进制文件副本

Large binary file copy with standard C++

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Copy a file in an sane, safe and efficient way

我搜索过类似的主题,但我找不到大型二进制文件的答案。 考虑到我有非常大的二进制文件(每个大约10或大约100 GB),如何使用标准C ++(无POSIX函数)使用以下函数复制它们:

1
2
3
4
bool copy(const std::string& oldName, const std::string& newName)
{
    /* SOMETHING */
}

编辑:
以下实施是否正常? (改编自评论中的链接)

1
2
3
4
5
6
7
8
9
10
11
bool copy(const std::string& oldName, const std::string& newName)
{
    bool ok = false;
    std::ifstream oldStream(oldName.c_str(), std::ios::binary);
    std::ofstream newStream(newName.c_str(), std::ios::binary);
    if (oldStream.is_open() && newStream.is_open()) {
        newStream << oldStream.rdbuf();
        ok = (oldStream.good() && newStream.good());
    }
    return ok;
}


您可以使用std::fopenstd::freadstd::fwritestd::fclose,所有这些都是标准C ++库(#include ,非常便携)的一部分,只要你不会弄乱二进制数据 不要将"t"说明符用于fopen

如果你选择一个适当的缓冲区大小(比如1兆比特)来进入顺序I / O性能领域,它甚至会相当快。