1、头文件介绍
#include <iostream>//标准输入输出流#include <fstream>//派生自iostream,包括ifstream和ofstream
using namespace std;//都在名称空间std中,别忘了加上
2、打开文件
const char* fileName="1.txt";//要打开的文件名,可以使路径名,默认情况下是所建工程下
fstream类派生了两个类ifstream/ofstream
fstream f(fileName,参数二);
参数二有多种形式,这里只看主要用的几种:
ios_base::in//打开文件用于读
ios_base::out//打开文件用于写
ios_base::app//打开文件,用于追加(不覆盖原有文件,默认情况是覆盖)
ios_base::binary//以二进制方式打开文件,默认情况下是文本文件方式
例:
fstream i(fileName,ios_base::in|ios_base::out);//打开文件用于读写(既可读也可写)
ifstream in(fileName,ios_base::binary|ios_base::in);//以二进制方式打开文件用于读
ofstream out(fileName,ios_base::out|ios_base::app);//打开文件用于追加
3、由于派生自iostream,很多其他的方法和iostream一样
比如:seekg()/eof()/clear()……
4、一些文件操作的例子
读写二进制文件
[cpp] view plain copy#include "stdafx.h" #include <iostream> #include <fstream> #include <string> using namespace std; struct plant { char name[20]; int age; char num[10]; }; int _tmain(int argc, _TCHAR* argv[]) { plant p; p.name[20]=(char)"yao"; p.age=21; p.num[10]=(char)"0950420011"; ofstream pf("data.dat",ios_base::out|ios_base::app|ios_base::binary); pf.write((char*)&p,sizeof(p)); pf.close(); ifstream in("data.dat",ios_base::in|ios_base::binary); plant p1; in.read((char*)&p1,sizeof(p1)); in.close(); cout<<p1.age<<endl<<p1.name<<endl<<p1.num<<endl; return 0; }循环读取指定文件的指定行
[cpp] view plain copy#include "stdafx.h" #include <iostream> #include <fstream> #include <string> #include <sstream> #include <time.h> //#include "iomanip.h" //const char* file="data.dat" using namespace std; const int MAX=1024; const int M=40; //#define //////======自定义函数判断输入是否为数字=======/////////// bool IsDigital(const string &str) { //int flag=0;//字符串中数字的个数 if(str=="") return false; const char* p=str.c_str(); int length=str.length(); for(int i=0;i<length;i++,p++) { if((*p<='0')||(*p>='9')) return false; } return true; } int _tmain(int argc, _TCHAR* argv[]) { [cpp] view plain copy char c; do { fstream f; cout<<"请输入文件名称(注:先把你要打开的文件复制到本程序下,如:'file.txt')"<<endl; int flag=0; [cpp] view plain copy do { string str; if(flag) { f.clear(); cout<<"输入文件不存在,请重新输入:"<<endl; } cin>>str; const char* file=str.c_str(); //string text=""; f.open(file,ios_base::in|ios_base::out|ios_base::binary); flag++; } while(!f.is_open()); int lineCount=1;//记录当前文件的总行数 int SumByte=0;//记录文件的总大小 while(!f.eof()) { char c; c=f.get(); if(c=='/n') lineCount++; SumByte++; } f.clear(); float kb; kb=(float)SumByte/1024; cout<<"当前文件的字节数是:"<<SumByte<<" Bit"<<endl; cout<<"当前文件的总大小是:"<<kb<<" KB"<<endl; cout<<"当前文件的总行数是: "<<lineCount<<endl; cout<<"/*===================================================*//n/*===================================================*/"<<endl; int line; string str_line; cout<<"/n接下来请输入你要读取文件的行数:/n"; cin>>str_line; while(!IsDigital(str_line)) { cout<<"输入格式不正确,请重新输入:/n"; cin>>str_line; } line=atoi(str_line.c_str()); cout<<"当前的line值 :"<<line<<endl; while((line<=0)||(line>lineCount)) { cout<<"输入数据有误(1--"<<lineCount<<"间),请重新输入:/n"; cin>>line; } cout<<"你选择了输出第"<<line<<"行"<<endl; //line=cin.get(); //string strOut;//输出内容 cout<<"/*===================================================*//n/*===================================================*/"<<endl; int count=0; char ch; f.seekg(0);//指向文件开始位置 for(int i=1;i<line;i++) { /*do { //f.read((char*)&ch,sizeof ch); ch=f.get(); count++; } while(ch!='/n');*/ while(f.read((char*)&ch,sizeof ch)) { count++; if(ch=='/n') break; } } cout<<"输出count的值:"<<endl; cout<<count<<endl; f.seekg(count);//跳转到所选行数的开头 cout<<"/*===================================================*//n"<<endl; cout<<"/n接下来输出你所选择的行:/n"; cout<<"/*===================================================*//n"<<endl; char a; while(f.read((char*)&a,sizeof a)) { cout<<a; if(a=='/n') break; } cout<<"////////////////////////////////////////////////////////////////"<<endl; cout<<"是否继续打开文件?是-选择y:否-按任意键结束(除y)"<<endl; cin>>c; } while(c=='y'); // char p; //cin>>p; return 0; }
复制文件
[cpp] view plain copy#include "stdafx.h" #include <iostream> #include <fstream> using namespace std; const char* file1="1.txt"; const char* file2="2.txt"; //把文件1的内容写到文件2的末尾 int _tmain(int argc, _TCHAR* argv[]) { ifstream in(file1);//默认方式打开文件1进行读 ofstream out(file2,ios_base::out|ios_base::app);//打开文件2进行写入(app为追加) out<<in.rdbuf();//将文件1的内容输入到文件2的流中 in.close();//关闭文件流 out.close(); return 0; }C++文件操作就介绍到这里
顶新闻热点
疑难解答
图片精选