http://www.weixueyuan.net/view/5825.html

如果程序的运行结果仅仅显示在屏幕上,当要再次查看结果时,必须将程序重新运行一遍;而且,这个结果也不能被保留。

如果希望程序的运行结果能够永久保留下来,供随时查阅或取用,则需要将其保存在文件中。

文件分类

外部文件和内部文件

  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】将百鸡问题计算结果存入文件。

#include<fstream>
#include<iomanip>
using namespace std;
int main(){
int i,j,k;
ofstream ofile; //定义输出文件
ofile.open("d:\\myfile.txt"); //作为输出文件打开
ofile<<" 公鸡 母鸡 小鸡"<<endl; //标题写入文件
for(i=;i<=;i++)
for(j=;j<=;j++){
k=-i-j;
if((*i+*j+k/==)&&(k%==)) //注意(k%3==0)非常重要
ofile<<setw()<<i<<setw()<<j<<setw()<<k<<endl; //数据写入文件
}
ofile.close(); //关闭文件
return ;
}

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

#include<fstream>
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
char a[];
ifstream ifile; //定义输入文件
ifile.open("d:\\myfile.txt"); //作为输入文件打开
int i=,j,k;
while(ifile.get(a[i])){ //读标题,请对比cin.get(),不可用>>,它不能读白字符
if(a[i]=='\n') break;
i++;
}
a[i]='\0';
cout<<a<<endl;
while(){
ifile>>i>>j>>k; //由文件读入数据
if(ifile.eof()!=) break; //当读到文件结束时,ifile.eof()为真
cout<<setw()<<i<<setw()<<j<<setw()<<k<<endl; //屏幕显示
}
ifile.close(); //关闭文件
return ;
}

重要提示

    • 操作步骤的第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>

C++文件操作:打开文件和写入文件 zz的更多相关文章

  1. Python文件操作:文件的打开关闭读取写入

    Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...

  2. ofstream文件输出流把二进制数据写入文件

    #include <fstream> #include <sstream> using namespace std; //在实际应用中,根据需要的不同,选择不同的类来定义:如果 ...

  3. Windows phone开发之文件夹与文件操作系列(一)文件夹与文件操作

    Windows phone7中文件的存储模式是独立的,即独立存储空间(IsolatedStorage).对文件夹与文件操作,需要借助IsolatedStorageFile类. IsolatedStor ...

  4. C 语言函数手册:涵盖字符测试、字符串操作、内存管理、时间换算、数学计算、文件操作、进程管理、文件权限控制、信号处理、接口处理、环境变量、终端控制

    1. 字符测试函数 函数 说明 isascii() 判断字符是否为ASCII码字符 2. 字符串操作 函数 说明 gcvt() 将浮点型数转换为字符串(四舍五入) index() 查找字符串并返回首次 ...

  5. IO文件的读取,以及写入文件内容

    package zxc; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.Fi ...

  6. Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数

    文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() ...

  7. python文件操作:字符编码与文件处理

    一.字符编码 二.文件处理 一.字符编码 储备知识点: 1. 计算机系统分为三层: 应用程序 操作系统 计算机硬件 2. 运行python程序的三个步骤 1. 先启动python解释器 2. 再将py ...

  8. Python [习题] 文件操作:目录间copy 文件

    [习题] 指定一个源文件,实现copy到目标目录.例如把/tmp/sample1.txt 拷贝到/tmp/sample2.txt原文件需要有读权限(默认rt权限),目标文件需要给写(w即可)权限. I ...

  9. PHP中文件操作(2)-- 写文件

    1.fread — 读取文件(可安全用于二进制文件) 语法:string fread ( int $handle , int $length ) $filename = "aa.txt&qu ...

  10. Python文件操作大全,随机删除文件夹内的任意文件

     在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件.文件夹操作的方法: os.path.abspath(path) #返回绝对路径os.path.basename(path ...

随机推荐

  1. nginx响应码

    ngx.status = ngx.HTTP_CONTINUE (100) (first added in the v0.9.20 release)ngx.status = ngx.HTTP_SWITC ...

  2. element ui 表格提交时获取所有选中的checkbox的数据

    <el-table ref="multipleTable" :data="appList" @selection-change="changeF ...

  3. Oracle PL/SQL编程之基础

    1.简介:pl/sql块由三个部分组成:定义部分.执行部分.例外处理部分,如下所示: declare: /*定义部分---定义常量.变量.游标.例外.复杂数据类型 begin /*执行部分---要执行 ...

  4. java有序map

    我们知道TreeMap的key是有顺序的,是自然顺序,也可以指定比较函数. 但TreeMap默认不是按插入的顺序.  为了让Map按照插入顺序显示,可以使用LinkedHashMap吧. 它内部有一个 ...

  5. Express4.10.2开发框架中默认app.js的代码注释

    //通过require()加载了express.path等模块var express = require('express');var path = require('path');var favic ...

  6. Software Architecture Pattern(Mark Richards)笔记

    软件架构模式 缺少规范架构的程序通常会变得紧耦合.脆弱.难以更改,缺少清晰的发展方向和愿景.这本小书用50多页介绍了常用的5种常见架构模式,相信不管是大牛还是萌新都会有所收获,特别是对我这种偏爱系统设 ...

  7. LoadRunner使用

    LoadRunner使用 软件版本:12.53 build 1203 操作系统: Windows7 以下内容摘录自LoadRunner的官方帮助文档. 介绍 LoadRunner现在是HP公司的产品, ...

  8. 完整maven项目搭建

    1. 在eclipse中New选择maven项目,并选择web类型这个百度一下到处有: 2. 写简单的controller示例: 3. 配置web.xml,主要是DispatcherServlet: ...

  9. Java入门系列-24-实现网络通信

    互联网上那么多设备,java 是如何与其他设备通信的呢?这次的内容是网络通信的基础,有了它咱们才能上网页.玩游戏.视频聊天. Socket 客户端套接字 Socket 客户端套接字,用于连接互联网提供 ...

  10. log4j.properties 基本配置

    log4j.rootLogger=WARN,stdout,D log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender ...