C语言学习,这一篇就够了!(六)-- 文件操作
7. 文件的输入输出
关于文件就不做过多的阐述,直接来写相关的操作
7.1 打开和关闭文件
7.1.1 打开文件
用fopen
来实现打开文件,调用方式为:fopen(文件名,使用文件方式);
例如:fopen("a1","r)
表示打开文件a1
使用读入的方式。
注意:fopen()
函数会获取文件信息,包括文件名、文件状态、当前读写位置等,将这些信息保存到一个 FILE 结构体变量中,然后将该变量的地址返回。
FILE是<stdio.h>
头文件当中的一个结构体,所以可以直接使用
FILE *fp = fopen("demo.txt", "r");
判断是否打开成功
如果打开失败会返回一个空指针,因此可以通过返回的指针来判断文件是否打开成功
#include <stdio.h>
int main()
{
FILE *fp = fopen("demo.txt", "r");
if (fp == NULL)
{
printf("打开失败");
}
else
{
printf("打开成功");
}
}
fopen
函数的打开方式
~控制读写权限的字符~
打开方式 | 说明 |
---|---|
“r” | **以“只读”方式打开文件。**如果文件不存在,出错。 |
“w” | **以“写入”方式打开文件。**如果文件不存在,那么创建一个新文件 |
“a” | **以“追加”方式打开文件。**如果文件不存在,出错。 |
“r+” | 以“读写”方式打开文件。如果文件不存在,出错。 |
“w+” | 以“写入/更新”方式打开文件。如果文件不存在,建新文件。 |
“a+” | 以“追加/更新”方式打开文件。如果文件不存在,出错。 |
~控制读写方式的字符~
打开方式 | 说明 |
---|---|
“t” | 文本文件。如果不写,默认为"t" 。 |
“b” | 二进制文件。 |
读写权限和读写方式可以组合使用,读写方式要放在读写权限中间或尾部,例如:
- 将读写方式放在读写权限的末尾:“rb”、“wt”、“ab”、“r+b”、“w+t”、“a+t”
- 将读写方式放在读写权限的中间:“rb+”、“wt+”、“ab+”
从上面的字符中,我们可以知道文件打开方式由6个字符组成,它们的含义分别是:
- r:读
- w:写
- a:追加
- t:文本文件
- b:二进制文件
- +:读和写
7.1.2 关闭文件
在文件使用完毕之后,需要使用fclose
函数把文件关闭,用法fclose(文件指针)
#include <stdio.h>
int main()
{
FILE *fp = fopen("demo.txt", "r");
if (fp == NULL)
{
printf("打开失败");
}
else
{
printf("打开成功");
}
// ... 操作文件
// 关闭文件
fclose(fp);
return 0;
}
7.2 字符读写文件
字符读写文件主要用到了2个函数fgetc
和 fputc
,用法非常简单,当成api使用即可
7.2.1 fgetc读取文件
下面通过代码来实现读取当前目录下的demo.txt
文件
#include <stdio.h>
int main()
{
FILE *fp = fopen("demo.txt", "rt");
char ch;
//如果文件不存在,给出提示并退出
if (fp == NULL)
{
printf("打开失败");
}
//每次读取一个字节,直到读取完毕
while ((ch = fgetc(fp)) != EOF)
{
putchar(ch);
}
putchar('\n'); //输出换行符
fclose(fp);
return 0;
}
输出结果
这正是我在demo.txt
文件中写的内容,读取成功
重点:上面代码实现的关键是 while
循环的条件(ch = fgetc(fp)) != EOF
,fgetc
每次从位置指针所在的位置读取一个字符,保存到变量当中,然后指针后移一位,当到达文件末尾时,就无法读取字符了,于是返回EOF
,over
这里也可以使用
feof
函数来判断是否到达文件结尾
7.2.2 fputc写入文件
写入文件采用fputc
来实现,调用方式fputc(ch,fp)
把字符ch写到文件指针变量fp
所指向的文件中
#include <stdio.h>
int main()
{
FILE *fp;
char ch;
//判断文件是否成功打开
if ((fp = fopen("demo.txt", "wt+")) == NULL)
{
puts("打开失败");
}
printf("输入:\n");
//每次从输入中读取一个字符并写入文件
while ((ch = getchar()) != '\n')
{
fputc(ch, fp);//输出到文件内
}
fclose(fp);
return 0;
}
7.3 字符串读写文件
在上面的字符读取文件方式中,一次只能读取一个字符,写也只能写一个,真的是超级慢,因此我们往往不会采用字符读取的方式
7.3.1 fgets读取文件
fgets()
函数用来从指定的文件中读取一个字符串,并保存到字符数组中,使用方法:
char *fgets (char *str, int n, FILE *fp);
str 为字符数组,n 为要读取的字符数目,fp 为文件指针。
注意:由于字符串的结尾会自动添加\0
,所以如果希望读取100个字符,n应当取101
注意:在n-1个字符之前如果出现了换行,或者到了文件的末尾,则读取结束,因此只能读取一行数据
示例:使用fgets读取文件
#include <stdio.h>
#include <stdlib.h>
#define N 100 // 宏定义N = 100
int main()
{
FILE *fp = fopen("demo.txt", "rt");
char str[N + 1];
if (fp == NULL)
{
printf("打开失败");
}
while (fgets(str, N, fp) != NULL)
{
printf("%s", str);
}
fclose(fp);
return 0;
}
输出结果
注意:fgets
当遇到换行符时,也会一并读取,因此格式回和原文件相同,gets
会忽略换行符
7.3.2 fputs写入文件
用法:int fputs(char *str,FILE *fp)
示例:向demo.txt文件中追加一句话
#include<stdio.h>
#include<string.h>
int main() {
FILE *fp = fopen("demo.txt","at+");
char attend[100];
char str[102] = {0};
if(fp == NULL) {
printf("打开失败");
}
printf("输入一句话\n");
gets(attend);
strcat(str,"\n");
strcat(str,attend);
fputs(str,fp);
fclose(fp);
return 0;
}
输入输出结果
读写文件部分就写这么多了,还有几种方式没有写,可以自己了解一下
结语
C语言复习的全部内容就在这里了,博主也是肝了几天才整理完,关于内容上有什么问题或者错误欢迎留言指出,好好学习,天天向上!
- 点赞
- 收藏
- 关注作者
评论(0)