忽略点十三:文件操作
我们要想对文件进行读取或写入,需要有一个能够访问到该文件的文件指针(FILE类型),这样我们就能通过文件指针对文件进行操作啦!
FILE *fp; //声明文件指针
fp = fopen(文件路径, 访问模式); //指向文件,第一个参数为字符串
关于访问模式: ——只读:“r”
——只写(覆盖): “w”
—— 文件末尾追加: “a”
——可读可写: “r+”或“w+”
——二进制文件:“b”
——文本文件:“t”
//访问模式可以叠加,例如"rb"代表读取二进制文件
之后我们就可以对文件进行操作啦(如fgetc()函数(读取)和fputc()函数(写入))
——关于读取:文件指针指向文件后,通过fgetc(fp);
获得当前指针之后位置的一个字符,每获得一个字符指针就会自动向后移动一个字符(如果到达文件尾部则会返回EOF
)
——关于写入:通过fputc(‘字符’, fp);
方式将字符写入到与fp
关联的文件中
文件指针不再使用后需断开关联,格式为:
fclose(fp); //若不加此句,程序正常结束后系统会自动为打开的文件调用fclose
举个栗子:
//省略代码
FILE *p1 = fopen("路径1", "r");
FILE *p2 = fopen("路径2", "w");
char c;
while ((c = fgetc(p1)) != EOF) { //把一个文件内容复制到另一个文件
fputc(c, p2);
}
fclose(p1);
fclose(p2);
注意!!!!
在给文件指针命名时,不能使用 stdin
、stdout
和 stderr
这三个名字,因为这三个名字是系统内置用于标准输入、标准输出、标准错误的文件指针名
我们可通过 fgetc(stdin);
获得来自标准输入的字符
通过 fputc(ch, stdout);
将 ch
字符输出到标准输出
通过 fputc(ch, stderr);
将 ch
字符输出到标准错误
除fgetc
和fputc
外,我们还可以使用fscanf
和fprintf
函数
我们可以使用fscanf通过文件指针读取:
也可以使用fprintf通过文件指针写出
fscanf(p1, "%c", &a); //通过文件指针p1获取字符并存储到a中
fprintf(p2, "%c", a); //通过文件指针p2将字符a写入文件中
这两个函数是不是感觉有点眼熟?对!大家熟悉的scanf
和printf
和它们长得很像,那它们之间有关系吗?
答案是有的。scanf
可以看作是 fscanf
的特例
printf
可以看作是fprintf
的特例
至于为什么,看下面的代码:
fscanf(stdin, "%c", &a); //等价于下一行
scanf("%c", &a);
fprintf(stdout, "%c", &a); //等价于下一行
printf("%c", a);
嗯嗯,上面也说啦,stdin和stdout的实质也是文件指针,分别代表从控制台获取,输出到控制台。
当然啦,stdin和stdout也可以通过fclose关掉,大家可以试一下关掉后还能进行scanf和printf嘛~ 赶紧跑路hahaha
如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢!