【发布时间】:2013-12-25 11:35:37
【问题描述】:
我想使用 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)。
谢谢
【问题讨论】:
-
您可以添加您的文本文件或从中摘录吗?
-
这是我用来测试的文本文件:pastebin.com/Lpm0DUnN
-
您确定这不是签名/未签名问题吗?尝试使用无符号字符。编辑(看到你的文本文件):好吧,没关系。
-
刚刚用 unsigned char 测试过,没用。
-
我刚刚对此进行了测试,它工作正常。在移至下一行之前,请使用 stream.tellg() 查看当前位置。由于您从 ios::cur 移动,并且如果您的 getpointer 未设置在文件的开头,那么您将不会移动到下一行的开头。