C++ 将二进制文件读入向量

C++ 将二进制文件读入向量,c++,C++,我找到了一些关于如何做的答案,但我的问题是,为什么我与使用C文件函数或流读取函数有所不同 如果我这样做: 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( &da

我找到了一些关于如何做的答案,但我的问题是,为什么我与使用C文件函数或流读取函数有所不同

如果我这样做:

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 );
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 );
auto fp=fopen(read_file.c_str(),“rb”);
fseek(fp,0,SEEK_END);
自动文件_sz=ftell(fp);
std::vector数据(文件_sz,0);
fseek(fp,0,SEEK_集);
fread(&data.at(0),1,文件_sz,fp);
fclose(fp);
然后,数据有10384个与文件_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 );
std::ifstream源文件(读取文件,std::ios\u base::binary);
if(orig_file.fail())
{
std::cout());
数据只有10374字节。谢谢


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

我猜你在文件的末尾有一些被视为空白的东西。如果你尝试签出它,会发生什么情况?默认情况下它跳过空白,禁用它确实是跳过了空白。我的guess是指文件末尾的某些内容被视为空白。如果您尝试签出它,会发生什么情况?默认情况下,它会跳过空白,要禁用它,实际上是跳过了空白。
data.assign( it_begin, std::istream_iterator< unsigned char >() );