c++讀取文本文件的一個極其容易忽略的空行問題
阿新 • • 發佈:2017-07-28
lac 文件內容 close urn 文本 原創 知識庫 nts report
#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;
C++用fstream打開文件之後,讀一次文件後,再次讀該文件卻怎樣也不能將文件的指針置到開頭?
2012-12-20 07:41 2859人閱讀 評論(0) 收藏 舉報 分類:版權聲明:本文為博主原創文章,未經博主允許不得轉載。
#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); 關閉文件,然後再打開該文件
c++讀取文本文件的一個極其容易忽略的空行問題