zoukankan      html  css  js  c++  java
  • C++文件操作:打开文件和写入文件

    如果程序的运行结果仅仅显示在屏幕上,当要再次查看结果时,必须将程序重新运行一遍;而且,这个结果也不能被保留。
    如果希望程序的运行结果能够永久保留下来,供随时查阅或取用,则需要将其保存在文件中。

    文件分类

    外部文件和内部文件

    1. 外部文件:指磁盘文件,也是通常所谓的文件。
    2. 内部文件:指在程序中运行的文件,更正式的称谓是“文件流对象”。
    3. 程序中操作的是内部文件,最后保存的是外部文件。

    文本文件和二进制文件

    1. 文本文件:由字符序列组成,以字符(character) 为存取最小信息单位,也称“ASCII码文件”。
    2. 二进制文件:由二进制数组成。

    使用过程

    本节只讨论文本文件的使用方法和操作过程及其简单应用。
    使用文本文件的过程是固定的,一般步骤如下:

    (1) 打开一个文件,使磁盘文件和文件流对象建立联系;

    2) 将数据按文本方式写入一个文件,就如同cout用于向显示器送数据。以后可从这个文件读取数据,就如同cin用于键盘输入。

    (3) 当不再使用文件时,要关闭文件,此时文件将从缓冲区中完全写回磁盘。这样,可以永久保存数据。

    操作步骤

    1.说明一个文件流对象(内部文件)。

    例如:     ifstream ifile;     //说明输入文件流对象ifile    

    ofstream ofile;     //说明输出文件流对象ofile
    说明:

    • 文件流类型ifstream支持从输入文件中提取数据的操作。
    • 文件流类型ofstream完成数据写入输出文件中的各种操作。
    • ifile是输入文件流对象,用于读;ofile是输出文件流对象,用于写。

    2.打开文件,在文件流对象和磁盘文件之间建立联系。

    例如:     ifile.open( "d:\my_in_file.txt" );    

    ofile.open( "d:\my_out_file.txt" );

    说明:

    • 双引号中的字符串(如"d:\my_in_file.txt" )为磁盘文件路径名。
    • 通过输入文件流对象(如ifile)或输出文件流对象(如ofile)打开指定磁盘文件,将在文件流对象和磁盘文件之间建立联系。
    • 输入/输出文件流对象都被称为“内部文件”,即和对应磁盘文件联系的“虚文件”。

    3.对文件进行读写操作。

    • 文件读写在文件缓冲区中进行。
    • 最常见的文件读写是顺序的,即从文件头开始进行。
    • 顺序读写可用C++的提取运算符(>>)和插入运算符(<<)进行;也可以用读字符的get()和读字符串的getline()等函数进行。

    4.关闭文件。
    文件操作结束后,应该显式地关闭该文件,与打开文件相对应,例如:    

    ifile.close();    

    ofile.close();
    关闭文件时,系统把与该文件相关联的文件缓冲区中的数据写到磁盘文件中,保证文件的完整;同时把磁盘文件名与文件流对象之间的关联断开,可防止误操作修改了磁盘文件。

    应用举例

    【例2.25】将百鸡问题计算结果存入文件。

     1 #include<fstream>
     2  #include<iomanip>
     3  using namespace std;
     4  int main(){
     5      int i,j,k;
     6      ofstream ofile;               //定义输出文件
     7     ofile.open("d:\myfile.txt");     //作为输出文件打开
     8     ofile<<"   公鸡      母鸡      小鸡"<<endl;   //标题写入文件
     9     for(i=0;i<=20;i++)
    10          for(j=0;j<=33;j++){
    11              k=100-i-j;
    12              if((5*i+3*j+k/3==100)&&(k%3==0))            //注意(k%3==0)非常重要
    13             ofile<<setw(6)<<i<<setw(10)<<j<<setw(10)<<k<<endl;   //数据写入文件
    14         }
    15      ofile.close();                //关闭文件
    16     return 0;
    17  }

    【例2.26】读出存放百鸡问题计算结果的文件

     

     1 #include<fstream>
     2  #include<iostream>
     3  #include<iomanip>
     4  using namespace std;
     5  int main(){
     6      char a[28];
     7      ifstream ifile;               //定义输入文件
     8     ifile.open("d:\myfile.txt");     //作为输入文件打开
     9     int i=0,j,k;
    10      while(ifile.get(a[i])){      //读标题,请对比cin.get(),不可用>>,它不能读白字符
    11         if(a[i]=='
    ') break;
    12          i++;
    13      }
    14      a[i]='';
    15      cout<<a<<endl;
    16      while(1){
    17          ifile>>i>>j>>k;                                 //由文件读入数据
    18         if(ifile.eof()!=0) break;            //当读到文件结束时,ifile.eof()为真
    19         cout<<setw(6)<<i<<setw(10)<<j<<setw(10)<<k<<endl;     //屏幕显示       
    20      }
    21      ifile.close();                 //关闭文件
    22     return 0;
    23  }

    重要提示

    • 操作步骤的第1、2步可以合并为1步,即说明文件流对象的同时打开对应的磁盘文件。例如:    

    ifstream ifile( "d:\my_in_file.txt" );  //说明输入文件流对象ifile并打开文件    

    ofstream ofile( "d:\my_out_file.txt" );//说明输出文件流对象ofile并打开文件

    • 打开文件时,如磁盘文件不存在,会自动建立文件,但指定目录必须存在,否则建立文件失败。
    • 计算机将外部设备也作为文件进行管理。例如:键盘和显示器是标准的输入输出文件,其文件名分别为cin和cout。
    • 磁盘文件操作与键盘、显示器操作非常相似。例题中用输出文件流对象(如ofile)代替cout,输入文件流对象(如ifile)代替cin,数据的去向和来源则由显示器和键盘变为磁盘文件。
    • 对文件进行操作,必须在程序前增加一句: #include<fstream>
  • 相关阅读:
    数据库中的LEFT JOIN 个人理解
    C++ 类的继承方式
    KMP字符串匹配算法
    C++ 运算符重载_加号
    Pin API INS
    Python 爬虫爬取多页数据
    Pin
    NO.12 13 章 字符串&扩展(哈希、KMP、分块、BIT)
    NO.11章 DP(递归递推、最大连续子序列和、LIS、LCS、最长回文子串、DAG、背包)
    NO.10章 图(遍历、最短路、生成树、拓扑、关键路径)
  • 原文地址:https://www.cnblogs.com/zhengfa-af/p/8157199.html
Copyright © 2011-2022 走看看