我正在使用Visual C ++ 2010开发MFC应用程序
我正在读取一个文件的数据,但似乎搜索不起作用
这是我的代码
//Transaction is a class i have defined before
void displayMessage(CString message)
{
MessageBox(NULL,message,L"error",MB_OK | MB_ICONERROR);
}
///////////////////////////////
ifstream input;
input.open("test.dat" , ios::binary );
if( input.fail() )
{
CString mess;
mess = strerror( errno );
mess.Insert(0,L"Error\n");
displayMessage(mess);
}
Transaction myTr(0,myDate,L"",0,0,L""); // creating an object of transaction
unsigned long position = 0;
while(input.read( (char *) &myTr , sizeof(Transaction)))
{
if(myTr.getType() == 400 )
position = (unsigned long)input.tellg() - sizeof(Transaction);
}
CString m;
m.Format(L"Pos : %d",position);
displayMessage(m);
input.clear();//I also tried removing this line
input.seekg(position,ios::beg );
m.Format(L"get pos: %d",input.tellg());
displayMessage(m);
input.close();
第一个displayMessage显示为:Pos : 6716
但第二个显示:get pos: 0
为什么搜索不起作用?
由于
答案 0 :(得分:1)
问题是CString.Format()
是一个varargs函数而basic_istream::tellg()
返回一个pos_type
,它不是一个可以作为vararg文章传递的类型,因此你会得到未定义的行为。< / p>
如果你想通过这个位置,你可以从tellg()
到CString::Format()
,你需要将它投射或者放在一个临时的中间变量中:
unsigned long new_pos = input.tellg();
m.Format(L"get pos: %d", new_pos);