从位置(到位置)读取文件

时间:2014-03-21 10:18:29

标签: c++ file

文件插播/ ifstreamreadbufferandseekfileposition.htm“> HTTP://www.java2s.com/Tutorial/Cpp/0240_File-Stream/ifstreamreadbufferandseekfileposition.htm

此页面可以使用

两次打印文件内容
file.seekg(0);

所以我假设seekg(0)将“cursor”(在java中)放到文件的开头,这个网站:http://www.cplusplus.com/doc/tutorial/files/证实了我。

但是当我对包含(0 \ n0 \ n0 \ n):

的文件执行此操作时
while(getline(file,line)) {
    CCLOG(line.c_str());
    CCLOG("%d",(int)file.tellg());
}

file.seekg(0);
CCLOG("%d",(int)file.tellg());

while(getline(file,line)) {
    CCLOG(line.c_str());
}

(顺便说一下,我在cocos2dx 2.2.2中这样做)

打印:

0
2
0
4
0
6
-1

我不知道我做错了什么。请帮忙

2 个答案:

答案 0 :(得分:3)

我不是100%肯定你在这里问什么(以及它与Java有什么关系),但如果你问为什么将文件光标重置到文件的开头不起作用,那么这里是我的回答:

确保在致电seekg之前重置文件的错误标记。所以而不仅仅是

file.seekg(0);

file.clear();
file.seekg(0);

这将成功将文件光标重置为文件的开头。原因是,一旦到达文件末尾,将设置EOF(文件结束)标志,seekg不会重置它。

答案 1 :(得分:2)

您看到的行为的原因是,一旦您读到文件的末尾,将设置eof()状态标志。任何在此之后读取或定位文件的尝试都将触发错误。该错误导致返回代码为ERROR,为-1。

您可以使用clear()重置状态标志(所有标志)。所以代码应该是

file.clear();
file.seekg(0);