ホームページ >バックエンド開発 >C++ >バイナリ ファイルが部分的にしかコピーされないのはなぜですか?どうすれば修正できますか?

バイナリ ファイルが部分的にしかコピーされないのはなぜですか?どうすれば修正できますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-14 00:06:11409ブラウズ

Why Does My Binary File Copy Only Partially, and How Can I Fix It?

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

バイナリ ファイルの読み取りと書き込みには、さまざまなタイプのデータを表すバイナリ コードで構成される生データの操作が含まれます。 。一般的なタスクの 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 サイトの他の関連記事を参照してください。

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