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>
  • 相关阅读:
    leetcode108 Convert Sorted Array to Binary Search Tree
    leetcode98 Validate Binary Search Tree
    leetcode103 Binary Tree Zigzag Level Order Traversal
    leetcode116 Populating Next Right Pointers in Each Node
    Python全栈之路Day15
    Python全栈之路Day11
    集群监控
    Python全栈之路Day10
    自动部署反向代理、web、nfs
    5.Scss的插值
  • 原文地址:https://www.cnblogs.com/zhengfa-af/p/8157199.html
Copyright © 2011-2022 走看看