首页 > 编程 > C++ > 正文

C++文件操作

2019-11-08 19:34:09
字体:
来源:转载
供稿:网友

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++文件操作就介绍到这里


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选