我想使用fstream在文本文件的特定行中转到特定字符。
例如,我想转到第2行,我这样做:
stream.ignore(20, '\n'); // because i have 20 characters in each line.
它工作正常,但当我尝试移动这一行时:
stream.seekg(1, ios::cur); // move 1 char from the current position.
我测试输出:
char test;
stream >> test;
它给了我一个在第3行中间的角色! (我应该在第2行)
然后我检查了我当前的位置是否正常:
stream.seekg(0, ios::cur);
stream >> char;
没关系,它给了我第2行开头的字符。但是当你看到我将0替换为1时,它给了我一个在第3行中间的字符! :/不应该移动1个字符?
你知道为什么会这样吗?
我正在制作基于磁贴的等距引擎,我需要在文本文件中保存和读取我的数据库。我保存/读取的地图区域需要在我的视图中,因此我必须从minx char读取到maxx char,并将miny(line)char读取到maxy(line)。
由于
答案 0 :(得分:2)
此处的链接:http://www.daniweb.com/software-development/cpp/threads/110602/problem-with-seekg表示必须以二进制模式打开文件才能使seekg可靠地使用偏移量运行。试试吧。
答案 1 :(得分:1)
试试这个:
cout<<"Now at "<<stream.tellg()<<endl;
stream.ignore(20,'\n');
cout<<"Moved to "<<stream.tellg()<<endl;
stream.seekg(1, ios::cur);
char test;
stream>>test;
cout<<"Got character "<<test<<" from position "<<stream.tellg()<<endl;