ホームページ >バックエンド開発 >C++ >バッファリングの問題を回避して、C でバイナリ ファイルを効率的に読み書きするにはどうすればよいですか?

バッファリングの問題を回避して、C でバイナリ ファイルを効率的に読み書きするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-12 20:45:14243ブラウズ

How Can I Efficiently Read and Write Binary Files in C   Avoiding Buffering Issues?

バイナリ ファイルの効率的な読み取りと書き込み

バイナリ ファイルの読み取りと書き込みを試みると、結果のバッファに意図したデータの一部。この問題が発生した場合、この記事では、これらの制限に対処する 2 つの代替アプローチを提供します。

C 固有のアプローチ

次の C コードでは、copy 関数とストリーム反復子を使用して、バッファリングせずにファイルの内容を直接コピーします:

#include <fstream>
#include <iterator>
#include <algorithm>

int main()
{
    std::ifstream input("C:\Final.gif", std::ios::binary);
    std::ofstream output("C:\myfile.gif", std::ios::binary);

    std::copy(
        std::istreambuf_iterator<char>(input),
        std::istreambuf_iterator<char>(),
        std::ostreambuf_iterator<char>(output));
}

このアプローチでは、次のことが維持されます。ファイルの整合性を確保し、正確なデータ転送を保証します。

Vector によるバッファリング

変更のためにバッファ内のファイルの内容が必要な場合、次のコードは vector とストリーム反復子:

#include <fstream>
#include <iterator>
#include <vector>

int main()
{
    std::ifstream input("C:\Final.gif", std::ios::binary);

    // Copies all data into buffer
    std::vector<unsigned char> buffer(
        std::istreambuf_iterator<char>(input), {});
}
このソリューションにより、次のことが可能になります。ファイルの内容を目的の出力ファイルに書き込む前に、メモリ内でファイルの内容を操作します。

以上がバッファリングの問題を回避して、C でバイナリ ファイルを効率的に読み書きするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。