文件
一、什么是文件
文件是指存储在外存储器上的数据的集合。
二、文件名
(1)文件路径:(2)主文件名;(3)文件后缀。
文件路径表示文件在外部存储设备中的位置。
三、文件的分类
ASCII文件又称为文本文件。在这种文件中,每个字节存放一个字符的ASCII码值。
二进制文件中的数据与该数据在内存中的二进制形式是一致的,其中一个字节并不代表一个字符。
四、文件缓冲区
ANSI C标准采用“缓冲文件系统”处理文件, 是指系统自动地为正在被使用的文件在内存中开辟一个缓冲区。当需要向外存储器中的文件输出数据时,必须先将数据送到为该文件开辟的缓冲区中,当缓冲区满以后才一起送到外存储器中。当需要从外存储器中的文件读入数据进行处理时,也首先一次从外存储器将一批数据读入缓冲区(将缓冲区充满),然后再从缓冲区中将数据逐个读出进行处理。
由此可以看出,在缓冲文件系统中,对文件的输入输出是通过为该文件开辟的缓冲区进行的,对文件中数据的处理也是在该缓冲区中进行的。
五、文件指针
定义文件类型指针的一般形式
*FILE 指针变量名;
其中指针变量名用于指向一个文件,实际上是用于存放文件缓冲区的首地址。
六、文件的操作
1)打开文件 在计算机内存中开辟一个缓冲区,用于存放被打开文件的有关信息。
2)文件处理 包括在缓冲区中读写数据以及定位等操作。
3)关闭文件 将缓冲区中的内容写回到外存(磁盘),并释放缓冲区。
1、文件的打开
fopen()函数
FILE * fopen(const char *path, const char *mode);
●path 要打开的文件的名字
●mode 以何种方式打开文件:是读还是写
功能:为需要打开的文件分配一个缓冲区,并返回该缓冲区的首地址给文件型指针变量fp。以后对文件的访问通过指针变量fp进行。
函数返回值: 如果打开文件成功,返回文件类型指针,否则返回 NULL
r 只读 为输入打开一个文件。若指定的文件不存在,则返回空指针值NULL。
w 只写 为输出建立一个新文件。若指定的文件已存在,则其中原有内容被删去;否则创建一个新文件。
a 追加写 向文件尾增加数据。若指定的文件不存在,则创建一个新文件。
r+ 读写 为读写打开一个文件。若指定的文件不存在,则返回空指针值NULL。
w+ 读写 为读写打开一个新文件。若指定的文件已存在,则其中内容被删去;否则创建一个新文件。
a+ 读与追加写 为读与向文件尾增加数据打开一个文件。
若指定的文件不存在,则创建一个新文件。
如果在后面附加“b”,则表示打开的是二进制文件,否则默认为打开的是文本文件。
2、文件的关闭
fclose()函数 int fclose(FILE *fp)
●fp 被fopen打开的文件类型指针
功能:是将由fp指向的缓冲区中的数据存放到外存文件中,然后释放该缓冲区。 当文件被关闭后,如果想再对该文件进行操作,则必须再打开它。虽然C语言允许打开多个文件,但打开的文件个数是有限的。
如果不关闭已经处理完的文件,当打开的文件个数很多时,会影响对其它文件的打开操作。因此,建议当一个文件使用完后应立即关闭它。 函数的返回值: 当顺利关闭后,返回值为0,否则返回EOF(-1)
3、向文件读写一个字符
int fputc(int c, FILE *fp);
函数功能: 将字符(ch的值)输出到fp所指向的文件中去。
参数:fp: 文件类型的指针,指向已打开的文件
c: 要写入的字符
返 回 值: 如果输出成功,则返回值就是输出的字符;
如果输出失败,则返回一个EOF。
用fgetc函数从文件读入一个字符
int fgetc(FILE *fp);
4、判文件结束
函数feof()
判文件结束函数的一般形式为 int feof(fp) 其中fp指向已打开的文件。
功能:在读fp指向的文件时判断是否遇到文件结束。如果遇到文件结束,则函数feof(fp)的返回非零值;否则返回值为0
feof()函数既可以用来判断二进制文件,也可以用来判断文本文件。
5、向文件读写一个字符串
读字符串函数 char *fgets(char *s, int size, FILE *fp);
其中fp为文件类型的指针,指向已打开的文件;是一个字符串指针;s用于存放从文件中读取的字符数据,size是一个整型变量,也可以是整型常量或整型表达式。
功能:从指定的文件读入size-1个字符存放到由s指向的存储空间中,读入结束后,将自动在最后加一个字符串结束符‘\0’。如果成功返回s,否则返回 NULL
6、写字符串函数
int fputs(const char *s, FILE *fp);
其中fp为文件类型的指针,指向已打开的文件,s可以是一个字符串常量,也可以是一个指向字符串的指针,还可以是存放字符串的数组名。用于存放需要写入文件的字符数据
功能:将指定的字符串写到文件fp中。若写成功,则返回非负整数,否则返回EOF(-1)。
7、向文件读写一组数据
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *fp);
功能:从指定的文件fp中读入一组数据。
ptr 存放读入数据在内存的首地址。
size 每个数据项的字节数。
nmemb 数据项个数。
fp 文件类型指针,指向已打开的文件
成功:返回实际读取的个数到文件末尾返回 0
size_t fwrite(const void *buf, size_t size, size_t count,FILE *fp);
buf 输出数据的首地址。
size 每个数据项的字节数。
count 数据项个数。
fp 文件类型指针,指向已打开的文件。
功能:将一组数据写到指定的文件中。
成功:返回实际写入的字节数到文件末尾返回 0
8、用rewind()函数使位置指针指向文件头
void rewind(FILE *fp);
fp 是已经打开的文件指针。
功能将文件的读写指针移动到文件的开头,此函数没有返回值。
9、用fseek()函数移动位置指针
函数原型为 int fseek(FILE *fp, long offset, int whence);
调用形式为 fseek(文件指针,位移量,起始位置)
功能:将文件的读写指针移动到指定的位置。
起始位置是指移动文件读写指针的参考位置,它有以下三个值:
SEEK_SET或0 表示文件头
SEEK_CUR或1 表示当前读写的位置
SEEK_END或2 表示文件尾
位移量是指以“起始位置”为基点,读写指针向文件尾方向移动的字
节数。这个参数的类型要求为长整型
返回值:成功返回 0 , 失败返回 -1
10、用ftell()函数测定位置指针的当前位置
long ftell(FILE *fp);
功能:得到流式文件中的当前位置,用相对于文件开头的位移量来表示。
返回值:返回当前位置,出错时返回-1L。
总结
1.文件是外部介质上数据的集合。文件标识是系统查找文件的依据,包括:路径、主文件名、扩展名。
2.数据文件有两类:ASCII文件和二进制文件。
3.为每一个使用的文件在内存中开辟文件缓冲区。
4.文件的指针是指向FILE类型数据的,具体指向某一文件的开头。
5.文件使用的步骤:打开、操作、关闭。具体操作是通过指向文件的指针变量来完成的。
6.对文件读写的两种方式:顺序读写、随机读写。