键盘、显示器、打印机、磁盘驱动器等逻辑设备, 其输入输出都可以通过文件管理的方法来完成。而在编程时使用最多的要算
是磁盘文件, 因此本节主要以磁盘文件为主, 详细介绍Turbo C2.0提供的文件 *** 作函数, 当然这些对文件的 *** 作函数也适合于非磁
盘文件的情况。
另外, Turbo C2.0提供了两类关于文件的函数。一类称做标准文件函数也称缓冲型文件函数, 这是ANSI标准定义的函数另一
类叫非标准文件函数, 也称非缓冲型文件函数。这类函数最早公用于UNIX *** 作系统, 但现在MS-DOS3.0 以上版本的 *** 作系统也可以
使用。下面分别进行介绍。
1.2.1 标准文件函数
标准文件函数主要包括文件的打开、关闭、读和写等函数。不象BASIC 、FORTRAN语方有顺序文件和随机文件之分, 在打开时
就应按不同的方式确定。Turbo C2.0并不区分这两种文件, 但提供了两组函数, 即顺序读写函数和随机读写函数。
一、文件的打开和关闭
任何一个文件在使用之前和使用之后, 必须要进行打开和关闭, 这是因为 *** 作系统对于同时打开的文件数目是有限制的, DOS
*** 作系统中, 可以在DEVICE.SYS中定义允许同时打开的文件数n(用files=n定义)。其中n 为可同时打开的文件数, 一般n<=20。因
此在使用文件前应打开文件, 才可对其中的信息进行存取。 用完之后需要关闭, 否则将会出现一些意想不到的错误。Turbo C2.0
提供了打开和关闭文件的函数。
1. fopen()函数
fopen函数用于打开文件, 其调用格式为:
FILE *fopen(char *filename, *type)
在介绍这个函数之前, 先了解一下下面的知识。
(1) 流(stream)和文件(file)
流和文件在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为"流", 而将
具体的实际设备叫做文件。流是一个逻辑设备, 具有相同的行为。因此,用来进行磁盘文件写的函数也同样可以用来进行打印机的
写入。在Turbo C2.0中有两种性质的流: 文字流(text stream)和二进制(binary stream)。 对磁盘来说就是文本文件和二进制文
件。本软件为了便于让读者易理解Turbo C2.0语言而没有对流和文件作特别区分。
(2) 文件指针FILE
实际上FILE是一个新的数据类型。它是Turbo C2.0的基本数据类型的集合, 称之为结构指针。有关结构的概念将在第四节中详
细介绍, 这里只要将FILE理解为一个包括了文件管理有关信息的数据结构, 即在打开文件时必须先定义一个文件指针。
(3) 以后介绍的函数调用格式将直接写出形式参数的数据类型和函数返回值的数据类型。例如: 上面打开文件的函数, 返回一
个文件指针, 其中形式参数有两个, 均为字符型变量(字符串数组或字符串指针)。本软件不再对函数的调用格式作详细说明。
现在再来看打开文件函数的用法。
fopen()函数中第一个形式参数表示文件名, 可以包含路径和文件名两部分。
如:
"B:TEST.DAT"
"C:\\TC\\TEST.DAT"
如果将路径写成"C:\TC\TEST.DAT"是不正确的, 这一点要特别注意。
第二个形式参数表示打开文件的类型。关于文件类型的规定参见下表。
表 文件 *** 作类型
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
字符 含义
————————————————————————————
"r" 打开文字文件只读
"w" 创建文字文件只写
"a" 增补, 如果文件不存在则创建一个
"r+" 打开一个文字文件读/写
"w+" 创建一个文字文件读/写
"a+" 打开或创建一个文件增补
"b" 二进制文件(可以和上面每一项合用)
"t" 文这文件(默认项)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
如果要打开一个CCDOS子目录中, 文件名为CLIB的二进制文件, 可写成:
fopen("c:\\ccdos\\clib", "rb")
如果成功的打开一个文件, fopen()函数返回文件指针, 否则返回空指针(NULL)。由此可判断文件打开是否成功。
2. fclose()函数
fclose()函数用来关闭一个由fopen()函数打开的文件 , 其调用格式为:
int fclose(FILE *stream)
该函数返回一个整型数。当文件关闭成功时, 返回0, 否则返回一个非零值。可以根据函数的返回值判断文件是否关闭成功。
例10:
#iclude
main()
{
FILE *fp/*定义一个文件指针*/
int i
fp=fopen("CLIB", "rb")/*打开当前目录名为CLIB的文件只读*/
if(fp==NULL) /*判断文件是否打开成功*/
puts("File open error")/*提示打开不成功*/
i=fclose(fp)/*关闭打开的文件*/
if(i==0) /*判断文件是否关闭成功*/
printf("O,K")/*提示关闭成功*/
else
puts("File close error")/*提示关闭不成功*/
}
使用文件 *** 作函数fopen,fscanf即可。1.fopen的函数原型:FILE
*
fopen(const
char
*
path,const
char
*
mode)
fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
r
以只读方式打开文件,该文件必须存在。
r+
以可读写方式打开文件,该文件必须存在。
rb+
读写打开一个二进制文件,允许读数据。
rw+
读写打开一个文本文件,允许读和写。
w
打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+
打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a
以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+
以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
(原来的EOF符不保留)
wb
只写打开或新建一个二进制文件;只允许写数据。
wb+
读写打开或建立一个二进制文件,允许读和写。
wt+
读写打开或着建立一个文本文件;允许读写。
at+
读写打开一个文本文件,允许读或在文本末追加数据。
ab+
读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b
字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
2.例程:
#include<stdio.h>
#define F_PATH "d:\\myfile\\file.dat"
char c
int main(){
FILE*fp=NULL//需要注意
fp=fopen(F_PATH,"r")
if(NULL==fp) return -1//要返回错误代码
while(fscanf(fp,"%c",&c)!=EOF) printf("%c",c)//从文本中读入并在控制台打印出来
fclose(fp)
fp=NULL//需要指向空,否则会指向原打开文件地址
return 0
}
在PRINTERS里面的文件是被转换过的打印机语言文件,也是缓存文件,如果发送到打打印机后文件就是消失,如果发送不成功就会被保留,想知道是什么文件就连上打印机把它打印机来(个人是这样理解的,仅供参考)欢迎分享,转载请注明来源:内存溢出
评论列表(0条)