fstream的奇怪问题

时间:2013-12-25 11:35:37

标签: c++ fstream

我想使用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)。

由于

2 个答案:

答案 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;