ホームページ >バックエンド開発 >C++ >C でバイナリ ファイルを効率的にコピーまたは変更するにはどうすればよいですか?

C でバイナリ ファイルを効率的にコピーまたは変更するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-29 03:41:14624ブラウズ

How Can I Efficiently Copy or Modify Binary Files in C  ?

バイナリ ファイルの入出力

C では、バイナリ ファイルの読み取りと書き込みには、バイナリ データを処理するための特定のファイル入出力メカニズムの使用が含まれます。提供されたコードはこれを達成しようとしますが、出力バッファがファイルのコンテンツの限られた部分しかキャプチャしないという問題が発生します。

C 解決策:

より効率的で C 準拠のアプローチを使用するには、次のコード スニペットの使用を検討してください。

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

この改訂されたコードでは、std::copy 関数が使用されます。バイナリ ファイルの内容を入力ストリーム入力から出力ストリーム出力に効率的に転送するために使用されます。このアプローチにより、Final.gif のコンテンツ全体が myfile.gif に正確にコピーされます。

代替バッファリング ソリューション:

ファイル内のデータにアクセスする必要がある場合変更用のバッファーを作成するには、次のコードを利用できます:

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

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

    // Copies entire file into a buffer
    std::vector<unsigned char> buffer(std::istreambuf_iterator<char>(input), {});
}

ここでは、入力ファイルの内容全体がファイルに読み込まれます。ベクトル バッファー バッファーにより、潜在的な出力操作の前にバイナリ データを変更できるようになります。

以上がC でバイナリ ファイルを効率的にコピーまたは変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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