第九章文件

Download Report

Transcript 第九章文件

文 件

输入输出的含义
输入指的是将数据从输入设备传送给程序
输出指的是将数据从程序传送给输出设备
 标准I/O:从键盘输入数据,输出到显示器屏幕
程序中需要输入大量数据
程序输出数据需要保存
 文件I/O:以文件作为输入输出对象,从文件
中读入数据,运行结果保存在文件中。
文 件

文件的概念
文件是指存储在外部存储介质上的数据的集合。对
于C++用户来说,常用的文件有两大类:程序文件
(如.h、.cpp、.obj、.exe等)和数据文件(.dat)。
根据文件中数据的组织形式,可分为:
 ASCII文件: 又称为文本文件或字符文件,每一个字
节放一个ASCII代码,代表一个字符,可直接显示;
 二进制文件: 又称内部格式文件或字节文件,是把内
存中的数据按其在内存中的存储形式原样输出到磁
盘上存放,不能直观显示文件内容。
文 件

文件流对象
文件流是以外存文件为输入输出对象的数据流。
cin流对象:从键盘输入数据
cout流对象:显示器输出数据
流对象cin和cout在头文件iostream.h中已定义,
可直接使用。而文件流对象必须由用户自己定义。
头文件fstream.h中已定义:
ifstream流类:从文件输入数据
ofstream流类:向文件输出数据
文 件

文件流对象的定义形式
文件的定义方式类似于变量定义。
 定义输入文件流对象:
ifstream 对象名;
例: ifstream infile;
定义输出文件流对象:
ofstream 对象名;
例: ofstream outfile;
其中,对象名的命名规则与标识符命名规则相同。
定义时,程序需要包含头文件fstream。
文 件

文件的打开
文件的打开操作是将文件流对象与文件建立
关联并指定文件的工作方式(文件的
“读”“写”)。
方式
ios::in
作用
方式
作用
ios::binary
“读”方式
以二进制形式打开
“写”方式
ios::out
ios::in|ios::out “读”“写”方式
(重写)
“写”方式
ios::app
(追加)
文 件

文件的打开——两种方式:
 调用文件流的成员函数open
格式:文件流对象名.open(文件名 , 打开方式)
例: ifstream infile;
infile.open("in.dat" , ios::in);
例: ofstream outfile;
outfile.open("out.dat", ios::out);
定义文件流对象时指定参数
例: ifstream infile("in.dat", ios::in);
ofstream outfile("out.dat", ios::out);
文 件

文件的关闭
对已打开的文件的读写操作完成后,应关闭文件,
解除文件与文件流对象的关联。
调用文件流的函数close
格式:文件流对象名.close( )
例: infile.close( );
outfile.close( );
文 件

对ASCII文件的操作
读写操作可利用流插入运算符“<<”和流提取运算
符“>>”来进行。
例: ifstream in("in.dat", ios::in);
in>>a;
例:从文件in.dat中读入20个数,挑选出其中的偶数
并按从大到小的顺序排序,排序结果输出到文件
out.dat中。
#include <fstream.h>
void main( )
{
int a[20], i, n=0, j, b;
ifstream infile("in.dat", ios::in);
ofstream outfile("out.dat", ios::out);
for(i=0;i<20;i++)
{
infile>>b;
if(b%2==0)
a[n++]=b;
}
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if(a[i]<a[j])
{ b=a[i]; a[i]=a[j]; a[j]=b; }
for(i=0;i<n;i++) outfile<<a[i]<<" ";
infile.close( );
outfile.close( ); }
文 件

对二进制文件的操作
需要用文件流的成员函数read和write。
read函数的形式为:
文件流对象名.read(字符型指针, 读入的字节数)
write函数的形式为:
文件流对象名.write(字符型指针, 写出的字节数)
其中,字符型指针指向内存中一段存储空间。
例:outfile.write(p1, 50);
是将字符指针p1所给出的地址开始的50个字节的内容
不加转换地写到outfile所关联的磁盘文件中。
例:任意输入5个数,将其以二进制形式输出到文件中。
#include <fstream.h>
#include <iostream.h>
void main( )
{
int a, i;
ofstream outfile("f.dat", ios::out|ios::binary)
for(i=0; i<5; i++)
{
cin>>a;
outfile.write((char *)&a, 4);
}
outfile.close();
}