C语言文件操作:如何在不影响其他数据的情况下追加到指定行尾写入
C语言中在文件行尾插入内容的问题
没有无需复制即可直接在行尾插入的方法,核心原因如下:
- 文件在系统中是以字节流形式存储的,不存在“行”这种物理划分,行只是文本层面的逻辑概念。第一行结尾的字节之后,紧接着就是第二行的起始字节。
- 即便用
fseek定位到第一行结尾,直接写入新数据会覆盖后续字节(也就是第二行的内容),无法实现插入效果。
可行的处理方式
要实现需求,必须先保存第二行及之后的内容,再写入新数据,最后恢复原有内容,以下是具体实现示例:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *fp = fopen("test.txt", "r+"); if (!fp) { perror("fopen failed"); return 1; } // 定位到第一行结尾 char line_buf[1024]; if (!fgets(line_buf, sizeof(line_buf), fp)) { perror("读取第一行失败"); fclose(fp); return 1; } long first_line_end_pos = ftell(fp); // 读取第二行及后续内容到内存 fseek(fp, 0, SEEK_END); long total_size = ftell(fp); long second_part_len = total_size - first_line_end_pos; char *second_part = malloc(second_part_len + 1); if (!second_part) { perror("内存分配失败"); fclose(fp); return 1; } fseek(fp, first_line_end_pos, SEEK_SET); fread(second_part, 1, second_part_len, fp); second_part[second_part_len] = '\0'; // 写入新数据到第一行结尾 fseek(fp, first_line_end_pos, SEEK_SET); fputs("abc,", fp); // 恢复第二行内容 fputs(second_part, fp); // 资源清理 free(second_part); fclose(fp); return 0; }
如果文件体积较小,也可以直接将整个文件读入内存,修改第一行后重新写入整个文件,逻辑会更简单。
内容的提问来源于stack exchange,提问作者Leaf
相关产品推荐
相关产品推荐

