文件操作

二进制文件和文本文件

文件:是由文件名来识别,因此只要声明了文件名,就可以读出或写入数据。只要文件名不同,就不会发生冲突。

C语言提供了两种文件类型:文本文件和二进制文件

文本文件

文本文件又名(ASCLL码文件)

特点:文本文件中的每一位数字都单独占用一个字节的存储空间。

优点:文本文件可以很方便地被其他程序读取,包括文本编译器、Office办公软件等,且其输出与字符一一对应,一个字节代表一个字符,便于对字符进行逐个处理,便于输入字符,但一般占据的空间比较大,且需环肥ASCLL码与字符键的转换时间。

二进制文件

特点:把整个数字作为一个二进制数来储存,并非数值的每一位数字都占用单独的储存空间

优点:以二进制文本输出数据,可以节省额外的空间和转换时间,但因为一个字节并非对应一个字符,不能直接输出其对应的字符形式

字节流

定义:无论一个C语言文件内容是什么,它一律把数据看成是由字节构成的序列,即字节流。

因此C语言文件又被称为流式文件

两种文件储存系统

C语言有缓冲型非缓冲型两种文件系统

第一种,缓冲型

缓冲型文件缓冲系统是指系统自动在内存中为每一个正在使用的文件开辟一个缓冲区,作为程序与文件之间数据交换的中间媒介。也就是在读写文件时,数据先送到缓冲区,再传递给C语言程序或外存上。缓冲文件系统利用文件指针标识文件。

缓冲型文件系统痛的文件操作,也称为高级文件操作,高级文件操作函数是ANSIC定义的可移植的文件操作函数,具有跨平台和可移植的能力,可解决大多数文件操作问题。

第二种,非缓冲型

非缓冲文件系统是不会自动设置文件缓冲区的,缓冲区必须由程序员自己设定。非缓冲文件系统没有文件指针,它使用称为文件号的整数来标识文件

文件的打开与关闭

在使用文件之前必须先打开文件。函数fopen()用来打开文件:

1
FILE *fopen(const char *filename, const char *mode)

返回值类型:fopen()的返回值是一个文件指针

FILE是stdio.h中定义的结构体类型,封装了与文件有关的信息,如文件句柄、位置指针及缓冲区等。缓冲文件系统的每个被使用的文件在内存中开辟一个缓冲区,用来存放文件有关的信息,这些现在被保存在一个FILE结构类型的变量中。

fopen()的两个形参:第一个形参filename表示文件名,可包含路径文件名两部分。第二个形参mode表示文件的打开方式,其取值如下表:

字符 含义
“r” 以只读的方式,打开文本文件。以“r”方式打开的文件,只能读出,而不能向该文件写入数据。该文件必须是已经存在的,若文件不存在,则会出错
“w” 以只写方式,创建并打开文本文件,已存在的文件将被覆盖。以“w”方式打开文件时,无论文件是否存在,都需创建一个新的文件,只能写入数据
“a” 以只写方式,打开文本文件,位置指针移到文件末尾,向文件尾部添加数据,原文件数据保留。若文件不存在,则会出错
“+” 与上面的字符串组合,表示以读写方式打开文本文件。即可向文件中写入数据,也可从文件中读出数据
“b” 与上面的字符串组合,表示打开二进制文件

以向在D盘中的demo.text读写为例

1
2
fp = fopen("D:\\demo.text","a+");//已读写方式打开demo
fp = fopen("D:\\demo.bin","ab+");//以二进制方式打开demo.bin

文件指针fp是指向FILE结构类型的指针变量定义如下

FILE *fp;

因为操作系统对于同时打开的文件数目是有限制的,所以在文件使用结束后必须关键文件,否则会出现意想不到的错误。在C语言中,函数fclose()用来关闭一个由函数fopen()打开的文件

1
int fclose(FILE *fp);

函数fclose()返回一个整型数。当文件关闭成功时,返回0值,否则返回一个非0值。

因此可以根据函数的返回值判断文件是否关闭成功。

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2023 dwx
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信