バイナリ ファイルの読み取りと書き込み
バイナリ ファイルの読み取りと書き込みには、さまざまなタイプのデータを表すバイナリ コードで構成される生データの操作が含まれます。 。一般的なタスクの 1 つは、バイナリ ファイルからデータをバッファに読み取り、それを別のファイルに書き込むことです。
問題:
バイナリの読み取りと書き込みを試行するとき次のコードを使用してファイルを作成すると、ファイルの最初の行の数個の ASCII 文字だけが、バッファ:
int length; char * buffer; ifstream is; is.open ("C:\Final.gif", ios::binary ); // get length of file: is.seekg (0, ios::end); length = is.tellg(); is.seekg (0, ios::beg); // allocate memory: buffer = new char [length]; // read data as a block: is.read (buffer,length); is.close(); FILE *pFile; pFile = fopen ("C:\myfile.gif", "w"); fwrite (buffer , 1 , sizeof(buffer) , pFile );
解決策:
この問題を解決するには 2 つの方法があります:
C ストリームの使用:
この方法では、C 標準ライブラリが提供する ifstream クラスと ofstream クラスを使用します。これにより、効率的で移植可能なファイル処理が可能になります。
#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)); }
変更のためのバッファの使用:
データをファイルに書き込む前に操作または変更する必要がある場合。ファイルを保存するには、バッファを使用できます。
#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), {}); }
以上がバイナリ ファイルが部分的にしかコピーされないのはなぜですか?どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。