1

重複の可能性:
健全で安全かつ効率的な方法でファイルをコピーする

同様のトピックを検索しましたが、大きなバイナリ ファイルの答えが見つかりませんでした。非常に大きなバイナリ ファイル (それぞれ ~10 または ~100 GB など) があることを考慮して、標準 C++ (POSIX 関数なし) を使用して、次の関数でそれらをコピーするにはどうすればよいですか。

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

EDIT:次の実装は大丈夫ですか?(コメントのリンクから適応)

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

1 に答える 1

2

std::fopen、、、および をstd::fread使用できます。これらはすべて標準 C++ ライブラリの一部であり (非常に移植性が高い)、指定子を使用しない限り、バイナリ データを台無しにすることはありません。std::fwritestd::fclose#include <cstdio>"t"fopen

シーケンシャル I/O パフォーマンスの領域に入る適切なバッファー サイズ (たとえば 1 メガバイト) を選択すると、かなり高速になります。

于 2012-10-08T03:56:43.523 に答える