【快速学】C语言-文件操作
相关函数位于<stdio.h>中
1-缓冲区/流
文件和程序之间有输入/输出缓冲区,缓冲区是一个内存空间
2-文件位置指针
读数据从文件位置指针开始读,写数据从文件指针位置开始覆写
3-打开文件-fopen()
FILE *fopen(const char *filename, const char *mode);
返回一个FILE指针,可将此指针存入一个变量,之后通过该指针操作此时打开的文件
mode表示打开文件的模式,常用mode:(还有很多)
mode | 含义 |
"r" |
读取一个文本文件,不写 |
"r+" |
以读/写方式打开文件,该文件必须存在。 |
"w" |
创建一个用于写入的文本文件,若文件存在则会清空文件 |
"w+" |
打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。 |
4-关闭文件-fclose()
int fclose( FILE *fp );
当作“关闭文件”使用。关闭文件流,成功则返回0,否则返回EOF。
5-写字符-fputc()
int fputc (int c, File *fp)
将字符c输出到文件fp中。英文字符一般是ASCII码,用整数表示,也可当作整数计算。中文字符是多字节字符,这种函数一般不能直接用,要做点其他事才行。
写成功,返回输出的字符,否则返回EOF
6-读字符-fgetc()
int fgetc(FILE *stream);
从文件stream读取一个字符。
读成功,返回读的字符,否则返回EOF。
7-读文件-fread()
size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
buffer:读入数据的存放地址,一般用一个数组存储
size:一次读的字节数
count:要读几次。总读取的字节数为size*count
stream:文件指针
8-写文件-fwrite()
size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream);
fwrite()参数与fread()参数含义相同
9-改变文件的位置指针-fseek()
int fseek(FILE *stream, long offset, int fromwhere);
fseek()执行成功时返回0,否则返回非0值,并设置error的值,可以用perror()函数输出错误。
stream:文件指针
offset:位移量
origin:位移起点
- 文件开头: SEEK_SET 0
- 文件当前位置:SEEK_CUR 1
- 文件末尾: SEEK_END 2
10-返回文件位置指针的位置-ftell()
long ftell(FILE *stream);
返回文件位置指针当前位置相对于文件首的偏移字节数,失败则返回-1
11-格式化读文件-fscanf()
int fscanf(FILE *stream, char *format[,argument...]);
这函数类似于scanf,使用时只是在形参中加了个文件指针。把文件中的内容当作输入即可。
返回成功匹配的参数个数,失败则返回EOF(-1)
示例:fscanf(fp,"%d",&a);
12-格式化写文件-fprintf()
int fprintf( FILE *stream, const char *format, [ argument ]...);
示例:fprintf(fp, "%s", "Hello World!");
13-读写文件常见问题
13.1 一些函数的读写特性
- fgetc()读单个字符,不会跳过空格和换行(空白字符)
- fscanf()读数字时,会跳过空格和换行(空白字符)
- fscanf()读字符串时,不会跳过空格换行,而是停下类,不会读取空格和换行(空白字符)。
- fscanf()可以指定输入格式,如
fscanf(fp,"%d,%d",&a,&b);
应输入1,2
才能正常读取。若输入1t2
,则只会正常读取第一个 - fgets()会读一行字符,遇到换行结束,会读取换行,将换行翻译为'\0'放入数组末尾
- fputs()不会自动加换行符,puts()会。
- fputs()可用于所有流,puts()只能用于标准输入输出流
13.2 读单个字符时注意字符间的空格,换行,
读单个字符时注意字符间的空白字符(空格,换行),函数不会自动跳过
解决:
- 读完加fgetc()。
- 一次读一行
- 移动光标位置
13.3 读数字时注意最后的换行
读数字时虽然会跳过空白字符,但是读取完最后一个数字后,该数字后的空白字符亦然存在于流中
14-常用的写文件程序
/*
1-写文件
一般用于读写文件中的数据,课设可用
*/
#include <stdio.h>
int main(void)
{
FILE *fp;//文件指针
fp = fopen("002.txt", "w");//打开文件,只写
if (NULL == fp)//打开文件失败
{
perror("open file error!");
return 0;
}
//此处以下是写入内容
fputc('a',fp);//写入字符'a'
fprintf(fp, "%s", "Hello World!\n");//格式化写入
int i;
for(i=0;i<10;i++)
fprintf(fp, "%d ",i);//格式化写入
//此处以上是写入内容
fclose(fp);//关闭文件
return 0;
}
15-常用的读文件程序
/*
1-读文件
一般用于读写文件中的数据,课设可用
*/
#include <stdio.h>
int main(void)
{
FILE *fp;//文件指针
fp = fopen("002.txt", "r");//打开文件,只读
if (NULL == fp)//打开文件失败
{
perror("open file error!");
return 0;
}
//此处以下,读取文件
//格式化读取字符串
char arr[200];
fgets(arr,14,fp);//能读空格
//fscanf(fp, "%s", arr);//不能读空格
int num[10]={};
//格式化读取数字
int i;
for(i=0;i<10;i++)
fscanf(fp,"%d",&num[i]);
//此处以上,读取文件
fclose(fp);//关闭文件
//输出读取的数据
puts(arr);
for(i=0;i<10;i++)
printf("%d ",num[i]);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效