1. ホーム
  2. c++

[解決済み] バイナリファイルの読み出しと書き込み

2022-03-02 03:38:16

質問

バイナリファイルをバッファに読み込んで、そのバッファを別のファイルに書き込むコードを書こうとしています。 以下のようなコードがあるのですが、バッファにはファイルの最初の行から数文字の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 );

解決方法は?

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

修正したりするためにバッファにあるそのデータが必要な場合は、こうしてください。

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

}