我已经在g ++(版本4.6.3)中尝试了以下代码的许多版本。C++ - 读取二进制文件错误或编译器错误?
int main(int argc,char *argv[])
{
std::string fname(argv[1]);
std::cout<<"fname is"<<fname<<std::endl;
// std::fstream f(fname.c_str(),
std::fstream::in|std::fstream::out|std::fstream::binary);
std::fstream f(fname.c_str(),std::ios::in|std::ios::out|std::ios::binary);
unsigned char b[512];
memset(b,0xff,512);
std::cout<<f.tellg()<<std::endl;
f.seekg(0,std::ios::beg);
std::cout<<f.tellg()<<std::endl;
f.read((char *)b,512);
for(int ii=0;ii<sizeof(sector0);ii++)
std::cout<<std::hex<<(int)(b[ii]) <<" ";
std::cout<<std::endl;
}
在每种情况下,结果是我通过在源代码(样品ASCII)的文件名是相同的,所以tellg报告一个1和缓冲文件相匹配。如果我传入可执行文件的文件名(我的示例二进制文件),tellg报告-1,转储全部是ff。
我做错了什么或者这是一个编译器错误?
提示:这不是一个编译器错误。 – 2012-04-07 04:44:39
在'std :: ios :: out'模式中是否需要打开? – keety 2012-04-07 04:50:33
keety。不是这部分,而是程序的后面部分。当然,我拿出一个样本。 – 2012-04-07 04:53:15