63-c语言文件行读写
C语言文件行读写主要通过
fgets(从文件读取一行,包括换行符,需指定缓冲区大小)和fputs(向文件写入字符串,需手动添加换行符)实现,操作时必须检查文件打开状态、处理文件结束条件(fgets返回NULL),并及时关闭文件,以确保正确读写文本内容并避免资源泄漏,适用于需要逐行处理文本文件的场景。
在C语言中,文件行读写是处理文本文件的常用方式。
一、基本概念
在C语言中,文件操作是通过标准库函数实现的,主要在stdio.h头文件中定义。文件行读写是指按行读取或写入文件内容,而不是按单个字符或格式化数据读写。
文件读写模式
- "r":只读模式(打开已存在的文本文件)
- "w":写入模式(创建新文件或清空已有文件)
- "a":追加模式(在文件末尾添加内容)
- "r+":读写模式(打开已存在的文件,可读可写)
- "w+":读写模式(创建新文件或清空已有文件)
- "a+":读写模式(在文件末尾追加内容)
二、常用行读写函数
1. 读取文件行 - fgets()
函数原型:char *fgets(char *s, int size, FILE *stream);
功能:从文件中读取一行(包括换行符),最多读取size-1个字符。
使用示例:
#include <stdio.h>
#define MAX_LINE 100
int main() {
FILE *fp;
char line[MAX_LINE];
fp = fopen("example.txt", "r");
if (fp == NULL) {
perror("打开文件失败");
return 1;
}
// 逐行读取文件内容
while (fgets(line, MAX_LINE, fp) != NULL) {
printf("%s", line); // 输出读取到的行
}
fclose(fp);
return 0;
}
2. 写入文件行 - fputs()
函数原型:int fputs(const char *s, FILE *stream);
功能:将字符串写入文件,不自动添加换行符。
使用示例:
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen("example.txt", "w");
if (fp == NULL) {
perror("打开文件失败");
return 1;
}
// 写入多行内容
fputs("第一行内容\n", fp);
fputs("第二行内容\n", fp);
fputs("第三行内容\n", fp);
fclose(fp);
return 0;
}
三、行读写的注意事项
-
文件打开检查:始终检查文件是否成功打开,避免程序崩溃
if (fp == NULL) { perror("打开文件失败"); return 1; } -
行长度限制:
fgets会限制读取的最大长度,防止缓冲区溢出 -
换行符处理:
fgets会读取换行符,fputs不会自动添加换行符,需在字符串中包含\n -
文件关闭:操作完成后务必关闭文件,释放系统资源
fclose(fp); -
文件结束判定:
fgets返回NULL表示文件结束或出错
四、对比其他读写方式
| 读写方式 | 函数 | 读写单位 | 适合场景 |
|---|---|---|---|
| 行读写 | fgets, fputs | 一行 | 文本文件处理,按行处理内容 |
| 字符读写 | fgetc, fputc | 一个字符 | 需要逐字符处理的场景 |
| 格式化读写 | fscanf, fprintf | 格式化数据 | 需要按特定格式读写数据 |
五、完整示例:文件行读写操作
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *inputFile, *outputFile;
char line[256];
// 打开输入文件(只读)
inputFile = fopen("input.txt", "r");
if (inputFile == NULL) {
perror("打开输入文件失败");
return 1;
}
// 打开输出文件(写入)
outputFile = fopen("output.txt", "w");
if (outputFile == NULL) {
perror("打开输出文件失败");
fclose(inputFile);
return 1;
}
// 逐行读取并写入
while (fgets(line, sizeof(line), inputFile) != NULL) {
// 处理行内容(例如添加前缀)
char processedLine[256];
snprintf(processedLine, sizeof(processedLine), "Processed: %s", line);
// 写入处理后的行
fputs(processedLine, outputFile);
}
// 关闭文件
fclose(inputFile);
fclose(outputFile);
printf("文件行读写操作完成!\n");
return 0;
}
六、常见问题
-
为什么fgets读取的行包含换行符?
fgets会将换行符\n作为行的一部分读入,这样可以保留原始文件的格式。
-
如何判断文件是否结束?
- 当
fgets返回NULL时,表示文件结束或发生错误。
- 当
-
为什么写入文件时内容不显示?
- 可能是未正确添加换行符
\n,或未关闭文件(缓冲区未刷新)。
- 可能是未正确添加换行符
-
如何处理长行?
- 使用足够大的缓冲区(如
MAX_LINE),或分段读取。
- 使用足够大的缓冲区(如
以上就是C语言中文件行读写的详细说明和使用方法。行读写是处理文本文件最常用的方式,适用于大多数需要按行处理文件内容的场景。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 软件从业者Hort
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

