可能的重复项:
以理智、安全和高效的方式复制文件
我搜索了类似的主题,但我找不到大型二进制文件的答案。考虑到我有非常大的二进制文件(例如每个~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::fopen
、std::fread
、std::fwrite
和std::fclose
,所有这些都是标准C++库的一部分(#include <cstdio>
,非常便携),只要你不使用"t"
说明符来fopen
,就不会弄乱二进制数据。
如果您选择适当的缓冲区大小(例如 1 兆字节)以使您进入顺序 I/O 性能领域,它甚至会相当快。