第十一章:文件操作01
让编程改变世界
Change the world by program
文件的关闭(fclose函数)
函数调用:
fclose(文件指针);
函数功能:
使文件指针变量不指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其相联系的文件进行读写操作。返回值:
关闭成功返回值为0;否则返回EOF(-1)文件的读写
对文件的读和写是最常用的文件操作。在C语言中提供了多种文件读写的函数: 字符读写函数: fgetc 和 fputc 字符串读写函数: fgets 和 fputs 数据块读写函数: freed 和 fwrite 格式化读写函数: fscanf 和 fprinf 下面分别予以介绍。使用以上函数都要求包含头文件stdio.h。fputc 和 fgetc
fputc()函数调用:
fputc ( ch,fp ) ;
函数功能:
将字符(ch的值)输出到 fp 所指向的文件中去。对于fputc函数的使用要说明几点
用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。 如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。 [codesyntax lang="c"]#include <stdio.h> #include <stdlib.h> void main() { FILE *fp; char ch, filename[20]; printf("Please input the filename you want to write: "); scanf("%s", filename); if( !(fp = fopen(filename, "wt+"))) { printf("Cannot open the file!n"); exit(0); // 终止程序 } printf("Please input the sentences you want to write: "); // ch = getchar(); // 请思考…… ch = getchar(); while( ch != EOF ) // ctrl + z { fputc(ch, fp); ch = getchar(); } fclose(fp); }[/codesyntax] 每写入一个字符,文件内部位置指针向后移动一个字节。 fputc函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF。可用此来判断写入是否成功。
fgetc()函数调用:
ch = fgetc(fp);
函数功能:
其意义是从打开的文件 fp 中读取一个字符并送入 ch 中。对于fgetc函数的使用要说明几点
在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。 在文件内部有一个位置指针。用来指向文件的当前读写字节。 在文件打开时,该指针总是指向文件的第一个字节。使用fgetc 函数后,该位置指针将向后移动一个字节。因此可连续多次使用fgetc函数,读取多个字符。 应注意文件指针和文件内部的位置指针不是一回事。 文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。 文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。 [codesyntax lang="c"]#include <stdio.h> #include <stdlib.h> void main() { FILE *fp; char ch, filename[20]; printf("Please input the filename you want to write: "); scanf("%s", filename); if( !(fp = fopen(filename, "r"))) { printf("Cannot open the file!n"); exit(0); // 终止程序 } while( ch != EOF ) // ctrl + z { ch = fgetc(fp); putchar(ch); } fclose(fp); }[/codesyntax]
知识补充
从一个文本文件顺序读入字符并在屏幕上显示出来:
[codesyntax lang="c"]ch = fgetc(fp); while( ch != EOF ) { putchar(ch); ch = fgetc(fp); }[/codesyntax] 注意:EOF不是可输出字符,因此不能在屏幕上显示。由于字符的ASCII码不可能出现 -1,因此EOF定义为-1是合适的。 当读入的字符值等于-1 时,表示读入的已不是正常的字符而是文件结束符。
从一个二进制文件顺序读入字符:
[codesyntax lang="c"]while( !foef(fp) ) { ch = fgetc(fp); }[/codesyntax] 注意:ANSI C提供一个feof()函数来判断文件是否真的结束。如果是文件结束,函数feof(fp)的值为1(真);否则为0(假)。以上也适用于文本文件的读取。