本文共 2140 字,大约阅读时间需要 7 分钟。
1.在读写一个文件之前,必须通过库函数fopen打开该文件.fopen用外部文件名与操作系统进行某些必要的连接和通信,并返回一个随后可以用于文件读写操作的指针.
声明一个文件指针fp:
FILE *fp;
FILE *fopen(char *name, char *mode);
注:FILE像int一样是一个类型名,而不是结构标记.name是文件名,mode为访问模式,包括:读("r"),写("w"),追加("a").
需要注意的几点:(1)如果打开一个不存在的文件用于写或追加,该文件将被创建.
(2)如果以写的方式打开一个已存在的文件时,该文件原来的内容将被覆盖.
(3)如以追加方式打开一个文件,则该文件原来内容将保持不变.
(4)读一个不存在的文件可能导致错误.
2.文件打开后对文件操作的函数:
(1)int getc(FILE *fp)
getc函数返回fp指向的输入流中的下一个字符.
(2)int putc(int c, FILE *fp)
该函数将c写入到fp指向的文件中
(3)int fscanf(FILE *fp, char *format, ....)
(4)int fprintf(FILE *fp, char *format, ....)
它俩为对文件的格式化输入或输出,它俩与scanf和printf的区别仅在于它俩的第一个参数是一个指向所要读写的文件的指针.
(5)int fclose(FILE *fp)
断开由fopen函数建立的文件指针和外部名之间的连接.并释放文件指针以供其他文件使用.
(6)char *fgets(char *line, int maxline, FILE *fp)为行输入函数
fgets函数从fp指向的文件中读取下一个输入行(包括换行符),并将它存放在字符数组line中,它最多可读取maxline-1个字符.读取的行将以'\0'结尾保存到数组中.
(7)int fputs(char *line, FILE *fp)
将一个字符串(不包括换行符)写入到一个文件中
注:库函数gets和puts的功能与fgets和fputs函数类似,但它们是对stdin和stdout进行操作.还有一点要注意,gets函数在读取字符串時将删除结尾的换行符('\n'),而puts函数将在写入字符串时将在结尾加一个换行符.
3.一个简单的例子(输出文件内容类似于linux的cat)
#include运行:gcc -o a test.c#include void filecopy(FILE *, FILE *); //声明拷贝函数int main(int argc, char *argv[]){ FILE *fp; if(argc == 1) //当参数中没有文件名时,从标准输入copy到标准输出 filecopy(stdin, stdout); else { while(--argc > 0) { if((fp = fopen(*++argv, "r")) == NULL) { printf("cat: can't open %s\n", *argv); return 1; } else { filecopy(fp,stdout); fclose(fp); } } } return 0;}void filecopy(FILE *ifp, FILE *ofp) //将ifp指向的文件拷贝到ofp指向的文件{ int c; while((c = getc(ifp)) != EOF) putc(c, ofp);}
./a t1.txt t2.txt
输出文件t1.txt和文件t2.txt的内容
4.启动一个C文件时,操作系统负责打开三个文件为标准输入,标准输出,标准出错,相应的指针分别为stdin,stdout,stderr
在大多数环境下stdin指向键盘,stdout和stderr指向显示器.
转载地址:https://blog.csdn.net/buaa_shang/article/details/8169604 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!