您的位置:首页 > 编程语言 > C语言/C++

C++用fstream打开文件之后,读一次文件后,再次读该文件却怎样也不能将文件的指针置到开头?

2012-12-20 07:41 411 查看
#include <iostream>

#include <fstream>

#include <cstdlib>

using namespace std;

class Copy_file{

public:

Copy_file();

~Copy_file();

void Copy_files();

void in_file();

void out_file();

private:

fstream inf;

fstream outf;

char file1[20];

char file2[20];

};

Copy_file::Copy_file(){

cout<<"请输入源文件名";

cin>>file1;

inf.open(file1,ios::in|ios::binary);

if(!inf){

cout<<"不能打开文件"<<endl;

abort();

}

cout<<"请输入目的文件名字";

cin>>file2;

outf.open(file2,ios::in|ios::out|ios::binary);

if(!outf){

cout<<"不能打开目的文件";

abort();

}

}

Copy_file::~Copy_file(){

inf.close();

outf.close();

}

void Copy_file::Copy_files(){

char ch;

inf.seekg(0);

inf.get(ch);

while(!inf.eof()){

if(ch>='a' && ch<='z')

outf.put(ch);

inf.get(ch);

}

}

void Copy_file::in_file(){

char ch;

/* inf.close();

inf.open(file1,ios::in|ios::binary);*/ // 采用关闭文件后,在打开文件可以把指针指到开头

inf.clear();

cout<<inf.tellg();

inf.seekg(ios::beg);

// inf.seekg(5,ios::cur);

inf.get(ch);

while(!inf.eof()){

cout<<ch;

inf.get(ch);

}

cout<<endl;

}

void Copy_file::out_file(){

char ch;

outf.seekg(0);

outf.get(ch);

while(!outf.eof()){

cout<<ch;

outf.get(ch);

}

cout<<endl;

}

int main()

{

Copy_file cf;

cf.Copy_files();

cout<<"源文件内容:"<<endl;

cf.in_file();

cout<<"目的文件的内容:"<<endl;

cf.out_file();

return 0;

}

这个意思是将ss.txt的内容复制到oo.txt cout<<inf.tellg(); 输出当前指针位置时,却一直返回-1 怎么都不能用inf.seekg(ios::beg);将指针指到开头,这个问题我查了一个早上才发现解决办法。。。

在定位前对流状态标志进行清除就可以了:
   inf.clear();
   inf.seekg(0,ios::beg);

file1读结束后,eof()返回真值时,file1的错误标志被设置为eofbit,于是,后续所有针对file1的操作都不能得到预期的结果,比如tellp、tellg、seekg、seekp等,因此,在进行其他针对file1的操作前,需要清除该错误标志~~~!


还有一种解决办法是

inf.close();

inf.open(file1,ios::in|ios::binary); 关闭文件,然后再打开该文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐