文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>c++流和文件流...

c++流和文件流...

时间:2010-08-11  来源:crcr

C++流和文件流 收藏

 

在程序设计中,数据输入/输出(I/O)操作是必不可少的,C++语言的数据输入/输出操作是通过I/O流库来实现的。C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。在进行I/O操作时,首先是打开操作,使流和文件发生联系,建立联系后的文件才允许数据流入和流出,输入或输出结束后,使用关闭操作使文件与流断开联系。

标准输入输出流(cout、cin)在使用过程中,只要在程序的开头嵌入相应的头文件“iostream.h”即可。

文件的打开和关闭是通过使用fstream类的成员函数open和close来实现的,fstream类用来对文件流进行操作,fstream类的头文件是fstream.h。

1.数据的输出cout

cout是标准输出设备即显示器(默认设备)连接的预定义输出流。C++语言的插入运算符“<<”向输出流发送字符,cout是数据的目的地,插入运算符“<<”把数据传送到cout。

输出流对象cout输出数据的语句格式为:

cout<<数据1<<数据2<<……<<数据n;

其中,“<<”是输出操作符,用于向cout输出流中插入数据。

在cout中还可以使用流控制符控制数据的输出格式,但要注意使用这些流控制符时,要在程序的开始部分嵌入头文件“iomanip.h”。

常用的流控制符及其功能如下表所示:

表1  I/O流的常用控制符

控制符 功   能

Dec 十进制数输出

Hex 十六进制输出

Oct 八进制数输出

setfill© 在给定的输出域宽度内填充字符c

setprecison(n) 设显示小数精度为n位

setw(n) 设域宽为n个字符

setiosflags(ios::fixed) 固定的浮点显示

setiosflags(ios::scientific) 指数显示

setiosflags(ios::left) 左对齐

setiosflags(ios::right) 右对齐

setiosflags(ios::skipws) 忽略前导空白

setiosflags(ios::uppercase) 十六进制数大写输出

setiosflags(ios::lowercase) 十六进制数小写输出

setiosflags(ios::showbase)

  当按十六进制输出数据时,前面显示前导符0x;当按八进制输出数据时,前面显示前导符0

Endl 输入一个换行符并刷新流

 

2.数据的输入cin

cin是与标准输入设备即键盘(默认设备)连接的预定义输入流。它从输入流中取出数据,数据从输入提起运算符“>>”处流进程序。

输入流对象cin输入数据的语句格式为:

cin>>变量名1>>变量名2>>……>>变量名n;

其中,“>>”是输入操作符,用于从cin输入流中取得数据,并将取得的数据传送给其后的变量,从而完成输入数据的功能。

注意:“>>”操作符后除了变量名外不得有其他数字、字符串,否则系统会报错。

3.文件流及其有关的类

文件是存储在磁盘、磁带等外部设备上的数据的集合,每一个文件都必须有一个唯一的文件名称。在使用文件前必须首先打开文件,使用完毕后必须关闭文件。对文件的操作是由文件流类完成的。文件流类在流与文件之间建立连接。下图是与文件操作相关的类及其继承关系。

ios

istream

ostream

ifstream

iostream

ofstream

fstream

 

ios

istream

ostream

ifstream

iostream

ofstream

fstream

 

图1 几个与文件处理相关的类及其继承关系结构图

下表是常用的I/O流类库的说明,以及在编程中需要包含到程序中的头文件。

表2 常用I/O流类库说明

类 名 说 明 编程中需要包含的头文件

ios 流基类,是抽象类 ostream.h

istream 通用输入流类和其它输入流类的基类 iostream.h

ifstream 输入文件流类 fstream.h

ostream 通用输出流类和其它输出流类的基类 iosream.h.

ofstream 输出文件流类 fstream.h

iostream 通用I/O流类和其它I/O流的基类 iostream.h

fstream I/O文件流类 fstream.h

 

4.文件的打开与关闭

对文件的操作是由文件流类完成的。文件流类在流与文件间建立连接。由于文件流分为三种:文件输入流、文件输出流、文件输入/输出流,所以相应的必须将文件流说明为ifstream、ofstream和fstream类的对象,然后利用文件流的对象对文件进行操作。

对文件的操作过程可按照一下四步进行:即定义文件流类的对象、打开文件、堆文件进行读写操作、关闭文件,下面分别进行介绍。

(1)定义文件流对象

利用文件流类可以定义文件流类对象,方法是:

文件流类 对象名;

如:

ifstream ifile; //定义一个文件输入流对象

ofstream ofile; //定义一个文件输出流对象

fstream iofile; //定义一个文件输出/输入流对象

(2)打开文件

定义了文件流对象后,就可以利用其成员函数open()打开需要操作的文件,该成员函数的函数原型为:

void open(const unsigned char *filename,int mode,int access=filebuf:openprot);

其中:filename是一个字符型指针,指定了要打开的文件名;mode指定了文件的打开方式,其值如下表所示;access指定了文件的系统属性,其取值为:

0         一般文件

1         只读文件:

2         隐藏文件

3         系统文件

表3 在ios类中定义的文件打开方式

文件打开方式 含 义

ios::in 以输入(读)方式打开文件

ios::out 以输出(写)方式打开文件

ios::app 打开一个文件使新的内容始终添加在文件的末尾

ios::ate 打开一个文件使新的内容添加在文件尾,但下次添加时,写在当前位置处

ios::trunc 若文件存在,则清除文件所有内容;若文件不存在,则创建新文件

ios::binary 以二进制方式打开文件,缺省时以文本方式打开文件

ios::nocreate 打开一个已有文件,若该文件不存在,则打开失败

ios::noreplace 若打开的文件已经存在,则打开失败

 

说明:

1)在实际使用过程中,可以根据需要将以上打开文件的方式用“|”组合起来。如:

ios::in|ios::out                表示以读/写方式打开文件

ios::in|ios:: binary             表示以二进制读方式打开文件

ios::out|ios:: binary            表示以二进制写方式打开文件

ios::in|ios::out|ios::binary       表示以二进制读/写方式打开文件

2)如果未指明以二进制方式打开文件,则默认是以文本方式打开文件。

3)对于ifstream流,mode参数的默认值为ios::in,对于ofstream流,mode的默认值为ios::out。

(3)文件的关闭

在文件操作结束(即读、写完毕)时应及时调用成员函数close()来关闭文件。该函数比较简单,没有参数和返回值。

利用对象和相应的成员函数对文件进行读写操作,我们将单独介绍。

5.文件的读写操作

在打开文件后就可以对文件进行读写操作了。从一个文件中读出数据,可以使用文件流类的get、getline、read成员函数以及运算符“>>”;而向一个文件写入数据,可以使用其put、write函数以及插入符“<<”,如下表所示:

表4 文件流类的文件操作成员函数

函数原型 说 明

get(char &ch) 从文件中读取一个字符

getline(char *pch,int count,char delim=’\n’) 从文件中读取多个字符,读取个数有参数count决定,参数delim 是读取字符是指定的结束符(默认为换行字符)

read(char *pch,int count) 从文件中读取多个字符,读取个数由参数counnt决定

put(char ch) 向文件写入一个字符

write(const char *pch,int count) 向文件写入多个字符,字符个数由count决定

 

顺序文件操作:这种操作方式只能从文件的开始处依次顺序读写文件内容,而不能任意读写文件内容。

从一个文件中读出数据,可以使用get、getline、read成员函数以及运算符“>>”;而向一个文件写入数据,可以使用put、write成员函数以及插入符“<<”。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载