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.close();
inf.open(file1,ios::in|ios::binary); 关闭文件,然后再打开该文件
#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); 关闭文件,然后再打开该文件
相关文章推荐
- 关于outlook 保存的.msg文件打开一次之后不能再次打开的问题
- fstream中建立bmp文件总是不能打开的一个处理办法
- C++ 将数据写入二进制文件后,第二次打开文件修改部分数据,怎么前一次写入的数据被删除了。
- vs2012创建或打开浏览数据库文件.sdf文件失败,intellisense不能用于c++项目,F12 不能跳转到定义处
- 解决VS2005中fstream不能打开带有中文路径文件的问题
- 创建或打开c++浏览数据库文件时发生错误,IntelliSense和浏览信息将不能用于C++项目。
- [求助]怎样一次打开多个文件
- Excel保存文件不能直接打开,打开之后显示灰屏,从左上角的文件中,再找到要打开的文件才能打开?
- Excel保存文件不能直接打开,打开之后显示灰屏,从左上角的文件中,再找到要打开的文件才能打开?
- 打开指针C++文件读写操作(一)将字母表写入TXT文本文件
- VS2005 FSTREAM 不能打开中文路径名文件的问题!
- fstream提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。 ifstream -- 从已有的文件读 ofstream -- 向文件写内容 fstream - 打开文件供读写
- 解决fstream不能打开带有中文路径文件的问题
- 怎样取消不能改动(仅仅读打开)的word文件的password
- 解决fstream不能打开带有中文路径文件的问题
- C++程序打包.dll文件并调用(不能打开.dll文件)
- win7环境下安装VC6.0之后不能打开文件,打开文件或添加文件会导致程序崩溃
- 创建或打开c++浏览数据库文件时发生错误,IntelliSense和浏览信息将不能用于C++项目。
- c++关于文件打开目录的问题
- c++中,保证头文件只被编译一次,避免多重包含的方法