c++filebinarybuffer

Reading and writing binary file


I'm trying to write code to read a binary file into a buffer, then write the buffer to another file. I have the following code, but the buffer only stores a couple of ASCII characters from the first line in the file and nothing else.

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

Solution

  • If you want to do this the C++ way, do it like this:

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

    If you need that data in a buffer to modify it or something, do this:

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