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、一些文件操作的例子
读写二进制文件
- #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;
- }
循环读取指定文件的指定行
- #include "stdafx.h"
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <sstream>
- #include <time.h>
-
-
- using namespace std;
- const int MAX=1024;
- const int M=40;
-
-
- bool IsDigital(const string &str)
- {
-
- 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[])
- {
- char c;
- do
- {
- fstream f;
- cout<<"请输入文件名称(注:先把你要打开的文件复制到本程序下,如:'file.txt')"<<endl;
- int flag=0;
- do
- {
- string str;
- if(flag)
- {
- f.clear();
- cout<<"输入文件不存在,请重新输入:"<<endl;
- }
- cin>>str;
- const char* file=str.c_str();
-
- 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;
-
-
- cout<<"/*===================================================*/\n/*===================================================*/"<<endl;
- int count=0;
- char ch;
- f.seekg(0);
- for(int i=1;i<line;i++)
- {
-
-
-
-
-
-
-
-
- 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');
-
-
- return 0;
- }
复制文件
- #include "stdafx.h"
- #include <iostream>
- #include <fstream>
- using namespace std;
- const char* file1="1.txt";
- const char* file2="2.txt";
-
- int _tmain(int argc, _TCHAR* argv[])
- {
- ifstream in(file1);
- ofstream out(file2,ios_base::out|ios_base::app);
- out<<in.rdbuf();
- in.close();
- out.close();
- return 0;
- }
C++文件操作就介绍到这里