C语言文件读写流程:fopen模式、fputc/fgetc用法与代码示例
C语言通过stdio.h库提供的标准接口进行高效的文件管理。核心流程包括使用fopen按指定模式(文本或二进制)打开文件获取FILE指针,利用fputc/fputs/fprintf写入数据,以及用fgetc/fgets/fscanf逐字符或逐行读取。操作结束时必须调用fclose释放缓冲区与内存。
准备条件与环境设置
所有文件操作均需包含头文件 #include <stdio.h>。操作对象本质上是字节流,分为文本文件和二进制文件两种处理方式。
第一步:打开和关闭文件
1. 初始化与访问模式
使用 fopen 创建新文件或打开已有文件,返回指向 FILE 结构的指针。该结构封装了文件状态与控制信息:
FILE *fopen( const char *filename, const char *mode );
访问模式 mode 决定了文件的交互方式:
二进制模式:处理非文本数据时,需在上述模式后加上 b,例如 "rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"。
2. 安全关闭资源
操作完成后必须调用 fclose。它会清空缓冲区、关闭底层文件句柄并释放分配的内存:
int fclose( FILE *fp );
若成功关闭返回0;若发生错误返回 EOF(定义在 <stdio.h> 中的常量)。
第二步:向文件写入数据
C语言提供多种写入函数以适应不同需求:
fputc(c, fp):写入单个字符。成功返回字符值,失败返回EOF。fputs(s, fp):写入以null结尾的字符串。成功返回非负值,失败返回EOF。fprintf(fp, format, ...):格式化输出字符串。
3. 写入实例(Linux环境)
演示使用 w+ 模式读写,并在同一文件中先写后读。注意:/tmp 是 Linux 临时目录,Windows 用户需修改为存在的路径如 C:\\tmp。
#include <stdio.h>
int main()
{
FILE *fp = NULL;
// 打开文件用于读写,无则创建
fp = fopen("/tmp/test.txt", "w+");
fprintf(fp, "This is testing for fprintf...\n");
fputs("This is testing for fputs...\n", fp);
// 后续将在此处添加读取代码,见下一步骤
fclose(fp);
return 0;
}第三步:从文件读取数据
读取策略取决于需要的粒度:
fgetc(fp):读取单个字符,遇到错误或EOF返回EOF。fgets(buf, n, fp):最多读取n-1个字符,自动追加null终止符。关键点:若在读满前遇到换行符'\n'或EOF,仅返回已读内容(含换行符),剩余部分留在缓冲供下次调用。fscanf(fp, "%s", buf):格式化读取。与gets/fgets不同,它会在遇到第一个空格或换行符时停止。
4. 读取实战与边界解析
承接上一步,在同一个 test.txt 中接续读取:
#include <stdio.h>
int main()
{
FILE *fp = NULL;
char buff[255];
// 必须以 'r' 重新打开或保持之前的 'w+' 状态继续
// 此处假设文件已存在且指针已定位到合适位置
fp = fopen("/tmp/test.txt", "r");
// 第一次读取:只读到空格处结束
fscanf(fp, "%s", buff);
printf("1: %s\n", buff ); // 输出: This
// 第二次读取:由于之前停在空格,fgets读取该行剩余部分
fgets(buff, 255, (FILE*)fp);
printf("2: %s\n", buff ); // 输出: is testing for fprintf...
// 第三次读取:读取下一整行
fgets(buff, 255, (FILE*)fp);
printf("3: %s\n", buff ); // 输出: This is testing for fputs...
fclose(fp);
return 0;
}执行结果逻辑解析:
fscanf因%s格式限制,只抓取了“This”,光标停在空格处。fgets紧接着读取剩余字符“ is testing for fprintf...\n”。- 第二次
fgets完整读取第二行“ This is testing for fputs...\n”。
第四步:二进制块传输
对于数组、结构体等大块存储,使用原始字节读写函数:size_t fread(void *ptr, size_t size, size_t count, FILE *stream);size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
以上就是C语言文件读写操作的详细内容,更多关于C语言文件管理的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













