具有标准C++的大型二进制文件副本



可能的重复项:
以理智、安全和高效的方式复制文件

我搜索了类似的主题,但我找不到大型二进制文件的答案。考虑到我有非常大的二进制文件(例如每个~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;
}
你可以

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

如果您选择适当的缓冲区大小(例如 1 兆字节)以使您进入顺序 I/O 性能领域,它甚至会相当快。

相关内容

  • 没有找到相关文章

最新更新