バイナリ ファイルの操作: 読み取りと書き込み
プログラミングの領域では、バイナリ ファイルの処理には特有の課題が生じる可能性があります。一般的なタスクの 1 つは、バイナリ ファイルをバッファに読み取り、その後それを別のファイルに書き込むことです。ただし、特定のアプローチでは制限が発生し、データの不整合が発生する可能性があります。
問題ステートメント
そのようなアプローチの 1 つは、char 配列バッファーを使用し、ファイル I/O を手動で管理することです。操作。ただし、この方法では、多くの場合、ファイルの最初の行から数個の ASCII 文字のみがバッファにキャプチャされ、残りのデータにはアクセスできなくなります。
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::ifstream クラスと std::ofstream クラスを使用します。 std::copy 関数は、入力ファイルの内容全体を出力ファイルに効果的に転送し、そのバイナリ データをシームレスにミラーリングします。
バッファリングの代替ソリューション
書き込む前に変更のためにバッファ内のバイナリ データにアクセスする必要がある場合は、次の点を考慮してください。アプローチ:
#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), {}); }
このアプローチでは、std::vector を使用してバイナリ データを収集します。その後、宛先ファイルに書き込む前に、必要に応じて変更のためにアクセスできます。
以上がデータ損失を回避しながら、C でバイナリ ファイルを効率的に読み書きするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。