C入门系列:第一章 基本类型
C入门系列:第二章 字符串
C入门系列:第三章 函数
C入门系列:第四章 数组和指针
C入门系列:第五章 数据存储类别和内存管理
C入门系列:第六章 文件输入/输出
C入门系列:第七章 结构和其他数据形式
C入门系列:第八章 C预处理器和C库
fopen() 第1个参数为文件名,第二个参数为创建的文件开启的权限,返回 FILE* 指针,一般与 fclose() 配合使用,fclose()传入fopen()返回的文件指针。
fopen()返回的文件指针并不指向实际的文件,它指向一个包含文件信息的数据对象,其中包含操作文件的I/O函数所用的缓冲区信息。
fclose()返回整数值,返回0表示关闭成功,否则返回EOF失败。
#include<stdio.h> #include<stdlib.h> // argc表示输入参数 // argv表示参数数据,argv[0]为终端输入的命令 int main(int argc, char *argv[]) { int ch; FILE *fp; // 文件指针 unsigned long count = 0; if (argc != 2) { printf("Usage:%s filename\n", argv[0]); exit(EXIT_FAILURE); } // fopen()创建一个文件 if ((fp = fopen(argv[1], "r")) == NULL) { printf("Can't open %s\n", argv[1]); exit(EXIT_FAILURE); } // 将输入写入文件,读取到文件结束符EOF=-1则结束 while ((ch = getc(fp)) != EOF) { putc(ch, stdout); count++; } // 关闭文件释放内存 fclose(fp); return 0; }getc() 和 putc() 函数与 getchar() 与 putchar() 函数类似。所不同的是getc()和putc()要告诉函数使用哪一个文件。
char ch; FILE *fp = fopen("test.txt", "r"); // 获取标注输入字符 ch = getchar(); ch = getc(fp); putc(ch, fpout); fclose(fp);fprintf() 和 scanf() 函数与 printf() 和 sanf() 类似,区别在于前者需要用第1个参数指定待处理的文件。
rewind() 函数传入一个文件指针,将文件光标返回到开始位置,方便从头开始读取文件。
#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 41 int main(void) { FILE *fp; char words[MAX]; if ((fp = fopen("wordy", "a+") == NULL) { fprintf(stdout, "Can't open file"); exit(EXIT_FAILURE); } puts("Enter words to add to the file; press the #"); puts("key at the beginning of a line to terminate"); // 将终端输入写入文件,输入'#'结束 while ((fscanf(stdin, "@s", words) == 1) && (words[0] != '#')) { fprintf(fp, "%s", words); } puts("File contents:"); rewind(fp); // 返回文件开始处 while (fscanf(fp, "%s", words) == 1) { puts(words); } if (fclose(fp) != 0) { fprintf(stderr, "Error closing file"); } return 0; }buf 是char类型数组的名称,STLEN 是字符串的大小,fp 文件指针。
fgets() 函数读取输入直到第1个换行符的后面或读到文件结尾,或者读取STLEN-1个字符。fgets()在末尾添加一个空字符使之成为一个字符串,字符串的大小是其字符加上一个空字符。
如果fgets()在读到字符上限之前已读完一整行,它会把表示行结尾的换行符放在空字符前面。
fgets()函数在遇到EOF时将返回NULL,可以利用这一机制检查是否到达文件结尾;如果未遇到EOF则返回传给它的地址。
fputs(buf, fp);buf 是字符串的地址,fp 用于指定目标文件。
由于fgets()保留了换行符,fputs()就不会再添加换行符。
有了 fseek() 函数,便可以把文件看作是数组,在fopen()打开的文件中直接移动到任意字节处。fseek()返回int类型的值。
ftell() 函数返回一个long类型的值,表示文件中的当前位置。
// 倒叙显示文件的内容 #include<stdio.h> #include<stdlib.h> #define CNTL_Z '\032' #define SLEN 81 int main(void) { char file[SLEN]; char ch; FILE *fp; long count, last; puts("Enter the name of the file to be proccessed"); scanf("