将二进制文件读入矢量

时间:2016-08-25 14:30:41

标签: c++

我找到了几个关于如何做到这一点的答案,但我的问题是为什么我在使用C FILE函数或使用流读取函数方面有所不同。

如果我执行以下操作:

auto  fp = fopen( read_file.c_str(), "rb" );
fseek( fp, 0, SEEK_END );
auto  file_sz = ftell( fp );

std::vector< unsigned char > data( file_sz, 0 );

fseek( fp, 0, SEEK_SET );
fread( &data.at( 0 ), 1, file_sz, fp );
fclose( fp );

然后数据有10384个与file_sz匹配的值。

如果我这样做:

std::ifstream  orig_file( read_file, std::ios_base::binary );

if( orig_file.fail() )
    {
    std::cout << "Error Opening Input File [" << read_file << "]. " << strerror( errno ) << "\n";
    return;
    }

orig_file.seekg( 0, std::ios::end );
auto len = orig_file.tellg();
orig_file.seekg( 0, std::ios::beg );

std::vector< unsigned char >
                        data( len );
orig_file.read( ( char * )&data[ 0 ], len );

然后数据具有相同的10384字节, 但如果我做以下事情:

std::istream_iterator< unsigned char >
                            it_begin( orig_file );
std::istream_iterator< unsigned char >
                            it_end;
std::vector< unsigned char >
                            data( it_begin, it_end );

data.assign( it_begin, std::istream_iterator< unsigned char >() );

数据只有10374个字节。感谢。

我不明白插入向量时9字节是如何丢失的。你能帮我解释一下吗?

0 个答案:

没有答案