c++读取文本文件的一个极其容易忽略的空行问题
Posted 匿名者2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++读取文本文件的一个极其容易忽略的空行问题相关的知识,希望对你有一定的参考价值。
分类:
版权声明:本文为博主原创文章,未经博主允许不得转载。
#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;
#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); 关闭文件,然后再打开该文件
以上是关于c++读取文本文件的一个极其容易忽略的空行问题的主要内容,如果未能解决你的问题,请参考以下文章