文件插播/ 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
我不知道我做错了什么。请帮忙
答案 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);