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

时间:2012-10-08 03:50:46

标签: c++ file stream binary copy

  

可能重复:
  Copy a file in an sane, safe and efficient way

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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