我找到了几个关于如何做到这一点的答案,但我的问题是为什么我在使用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字节是如何丢失的。你能帮我解释一下吗?