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 <stdio.h>
#include <stdlib.h>
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);
}运行:gcc -o a test.c
./a t1.txt t2.txt
输出文件t1.txt和文件t2.txt的内容
4.启动一个C文件时,操作系统负责打开三个文件为标准输入,标准输出,标准出错,相应的指针分别为stdin,stdout,stderr
在大多数环境下stdin指向键盘,stdout和stderr指向显示器.
本文介绍了C语言中访问文件的基本操作,包括使用fopen打开文件、不同打开模式的含义、文件读写函数如getc、putc、fscanf、fprintf、fclose等的使用,以及 fgets 和 fputs 的行输入输出。此外,还提及了标准输入、输出和错误处理的文件指针 stdin、stdout 和 stderr。

被折叠的 条评论
为什么被折叠?



