首页 理论教育C++程序设计教程:文本文件读写方法

C++程序设计教程:文本文件读写方法

【摘要】:文本文件的结束以ASCII码的控制字符0x1A表示。使用流成员函数读取文件数据常用的输入流成员函数有get、getline和read等。虽然给出长度参数,但当遇到文件结束标记或者文件结束时读操作结束。例如,和上例相同功能的程序如下:3.文本文件的读写示例分析以下程序的执行结果。程序的执行结果如下:His编写一个程序,将文本文件test.txt复制到文本文件real.txt。

文本文件也是ASCII码文件,即文本文件以字符方式存放数据。文本文件的结束以ASCII码的控制字符0x1A表示。

1.文本文件读方法

在C++中,提供了几种文本文件读方法。

(1)使用流运算符直接读取文件数据

文件读操作可以直接使用流的提取运算符“>>”,这个运算符将完成文件的字符转换工作。

例如,以下程序的功能是打开文件test用于读,从中读取字符,然后在显示器上输出这个字符串。

注意:使用“>>”运算符从文件流中读取字符时,遇到空白符或换行符时终止。

(2)使用流成员函数读取文件数据

常用的输入流成员函数有get、getline和read等。

◇get函数

该成员函数有如下几个版本:

int get();

inline istream&get(char*,int,char='\n');

inline istream&get(unsigned char*,int,char='\n');

inline istream&get(signed char*,int,char='\n');

istream&get(char&);

inline istream&get(unsigned char&);

inline istream&get(signed char&);

istream&get(streambuf&,char='\n');

其功能与提取运算符(>>)很相似,主要的不同点是get()函数在读取数据时包括空白字符。对于上例的程序,在读取10个字符时若遇到空白字符则会终止,以下程序可以从文件中读取10个字符,不论其中是否包含空白字符:

◇getline函数

该成员函数有如下几个版本:

inline istream&getline(char*,int,char='\n');

inline istream&getline(unsigned char*,int,char='\n');

inline istream&getline(signed char*,int,char='\n');

其功能是允许从输入流中读取多个字符,并且允许指定输入终止字符(默认值是换行字符),在读取完成后,从读取的内容中删除该终止字符。与上例功能相同的程序如下:

◇read函数

该成员函数有如下几个版本:

istream&read(char*,int);

inline istream&read(unsigned char*,int);

inline istream&read(signed char*,int);

该函数从一个文件读字节到一个指定的存储区域,由长度参数确定要读的字节数。虽然给出长度参数,但当遇到文件结束标记或者文件结束时读操作结束。与上例功能相同的程序如下:

在从文件流中读取字符时,不会像getline函数一样在字符串末尾加上'\0'。

2.文本文件写方法

在C++中提供了几种文本文件写方法。

(1)使用流运算符直接写

文件写操作可以直接使用流的插入运算符“<<”,这个运算符将完成文件的字符转换工作。

例如,以下程序的功能是打开文件test用于写,向其中写入12个字符。(www.chuimin.cn)

(2)使用流成员函数

常用的输出流成员函数有put和write等。

◇put函数

其使用格式如下:

inline ostream&put(char c);

inline ostream&put(signed char c);

该函数把一个字符写到输出流中。以下两个语句的功能是相同的,但第二个受到该I/O流的格式标志字的影响:

◇write函数

其使用格式如下:

inline ostream&ostream∷write(const unsigned char*_s,int_n);

inline ostream&ostream∷write(const signed char*_s,int_n);

该函数把内存中的一块内容写到一个输出文件流中,长度参数指出写的字节数。write函数当遇到空字符时并不停止。

例如,和上例相同功能的程序如下:

3.文本文件的读写示例

【例8.1】分析以下程序的执行结果。

解:上述程序先在当前目录下建立一个test文本文件,并写入“His course is C++36”数据,然后打开该文件,将其中的数据输到变量s中,由于读时遇到空格终止,所以s为“His”。程序的执行结果如下:

His

【例8.2】编写一个程序,将文本文件test.txt复制到文本文件real.txt。

解:使用输入流成员函数get()从文本文件test.txt中读取一个字符ch,然后使用输出流成员函数put()将字符ch写入文本文件real.txt中,继续这一过程直到get()读完为止。程序如下:

【例8.3】编写一个程序,设计一个教师类Teacher,包含工号、姓名和工资数据,输入一个教师数据,将其写到teadata.dat文件中,然后从中读出该数据并输出。

解:在Teacher类中设计setdata、readdata和writedata成员函数实现相应的功能。程序如下:

程序的一次执行结果如下:

输入教师数据:

工号:501↙

姓名:wu↙

工资:3400↙

输出职工数据:

工号:501

姓名:wu

工资:3400

将教师数据写入文件

从文件中读教师数据

输出教师数据:

工号:501

姓名:wu

工资:3400