c++ 中关于重复读取文件的问题

如果一个文件已经被读到头了,想要在不关闭文件的情况下读取文件该怎么办呢?我用文件名.seekg(0,ios::beg)为什么没有反应呢?代码如下intmain(){ifs... 如果一个文件已经被读到头了,想要在不关闭文件的情况下读取文件该怎么办呢?我用
文件名.seekg(0,ios::beg) 为什么没有反应呢?代码如下
int main()
{
ifstream infile("text.txt");
char c;
infile>>c;
while(infile)
{
cout<<c<<endl;
infile>>c;
}
infile>>c;cout<<c<<endl; 这时候文件输出的是最后一个字符
infile.seekg(0,ios::beg);
inflie>>c;cout<<c<<endl; 这时候文件输出的还是最后一个字符,这么样才能输出第一个字符呢?
}
展开
 我来答
neulinux
2011-11-27 · TA获得超过906个赞
知道小有建树答主
回答量:627
采纳率:0%
帮助的人:355万
展开全部
这个情况的原因是这样的:
1.ifstream::seekg()函数的用法没有问题,它会把读取的指针移动到文件开头,但是请注意这里的“读取”是针对ifstream::read()来说的,你可以使用read方法尝试输出文件内容,结果证明seekg()肯定是有效的。
2.问题出在>>操作符,因为ifstream的>>是从istream中继承的,所以建议你看下istream对于>>的实现,我没有具体去找,但是原因基本上是因为>>读取根本股关心ifstream中的那个指针的位置。这个还需要你自己去求证一下。
wskjuf
2011-11-27 · TA获得超过1289个赞
知道大有可为答主
回答量:1731
采纳率:0%
帮助的人:1897万
展开全部
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
ifstream infile;
infile.open("text.txt");

char c;
infile >> c;
while (infile)
{
cout << c << endl;
infile >> c;
}
infile >> c;
cout << c << endl; // 这时候文件输出的是最后一个字符

//cout << infile.rdstate(); // 可知,状态已经出错,执行seekg将失败
infile.clear(); // 清掉所有错误标志
infile.seekg(0, ios_base::beg); // ok
infile >> c;
cout << c << endl;

return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式