subject_24596.htm

来自「一些关于vc的问答」· HTM 代码 · 共 78 行

HTM
78
字号
<p>
序号:24596 发表者:东海藏龙 发表日期:2002-12-14 08:41:53
<br>主题:如何回到文件的开头?
<br>内容:看以下的原程序:<BR>#include &lt;fstream&gt;<BR><BR>void main()<BR>{<BR>&nbsp;&nbsp;ifstream fin("abc.txt");<BR>&nbsp;&nbsp;char array[100];<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;while(1)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp; while(!fin.eof())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fin.getline(array,sizeof(array));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;array&lt;&lt;endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp; }<BR>}<BR><BR>这是在vc6下用console写的<BR><BR>运行结果是只把abc.txt打印了一遍,我想让他进入死循环的打印,应该怎么办??<BR><BR>我试过了在内层while结束后,先close再open,也没有用。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2002-12-14 09:46:03
<br>内容:fin.seekg( 0, ios_base::beg );<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:C星 回复日期:2002-12-14 09:51:54
<br>内容:内层while循环完后,文件位置指针已移到了文件末尾,用fin.seekg(0);把文件位置指针移到文件开头(位置0)可以实现重复打印了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:东海藏龙 回复日期:2002-12-14 10:44:44
<br>内容:我会试一下的,多谢
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:东海藏龙 回复日期:2002-12-14 12:14:54
<br>内容:#include&lt;iostream&gt;<BR>#include&lt;fstream&gt;<BR><BR>using namespace std;<BR><BR>void main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;ifstream fin("abc.txt");<BR>&nbsp;&nbsp;&nbsp;&nbsp;char array[100];<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;while(1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(!fin.eof())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fin.getline(array,sizeof(array));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;array&lt;&lt;endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fin.seekg(0);//或者fin.seekg(0,ios_base::beg);<BR>&nbsp;&nbsp; }<BR>}<BR><BR><BR>还是不行呀
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:东海藏龙 回复日期:2002-12-14 12:15:52
<br>内容:还是不能死循环打印文件
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2002-12-14 12:40:30
<br>内容:ifstream fin("c:\\abc.txt");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;fin.rdbuf();<BR>&nbsp;&nbsp;&nbsp;&nbsp;fin.seekg(0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;fin.rdbuf();<BR>上面代码可以打印文件内容两次
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2002-12-14 12:43:16
<br>内容:问题不在于seekg<BR>而是getline<BR>好像每次getline过后,都是读取前一次getline后面一行,而跟文件定位无关<BR>也就是说,你虽然定位到了头部,但是前面的getline却实在尾部读,你再次进入循环,读一次,也是读的尾部内容,没有读到东西<BR><BR>//猜想,以前遇上这个问题,不过忘记了,惭愧.继续帮你查看资料
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2002-12-14 12:48:51
<br>内容:说错了<BR>不是这样
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:tjhe 回复日期:2002-12-14 13:28:00
<br>内容: while(1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!fin.eof())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fin.getline(array,sizeof(array));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;array&lt;&lt;endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fin.clear();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fin.seekg(0);//或者fin.seekg(0,ios_base::beg);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp; }<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:东海藏龙 回复日期:2002-12-14 14:09:26
<br>内容:果然正确, fin.clear();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fin.seekg(0);//或者fin.seekg(0,ios_base::beg);<BR>是什么意思哪?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2002-12-14 18:47:49
<br>内容:读到文件结束时进入eof状态<BR>clear()可清楚文件读写过程中的这些状态(msdn)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2002-12-16 21:03:10
<br>内容:ios类中的成员函数:<BR>void clear();&nbsp;&nbsp; //清除bad,eof和fail所对应的标志状态,使之恢复为正常状态<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//值0,使good标志状态恢复为1。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?