c语言如何删除txt文件某一行
时间: 2023-12-01 13:02:17 浏览: 194
在 C 语言中,删除文本文件中的某一行可以通过以下步骤实现:
1. 先将原文件内容读入内存,并在内存中删除要删除的行。
2. 清空原文件内容,并将内存中修改后的内容写入文件。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char filename[100];
int line_to_delete;
// 获取要操作的文件名和要删除的行号
printf("Enter filename: ");
scanf("%s", filename);
printf("Enter line to delete: ");
scanf("%d", &line_to_delete);
// 打开文件
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Error opening file\n");
exit(1);
}
// 统计文件中的行数
int line_count = 0;
char c;
while ((c = fgetc(fp)) != EOF) {
if (c == '\n') {
line_count++;
}
}
// 关闭文件并重新打开
fclose(fp);
fp = fopen(filename, "r");
if (fp == NULL) {
printf("Error opening file\n");
exit(1);
}
// 分配内存并读入文件内容
char **lines = (char **) malloc(sizeof(char *) * line_count);
int i = 0;
size_t len = 0;
while (getline(&lines[i], &len, fp) != -1) {
i++;
}
// 关闭文件并重新打开
fclose(fp);
fp = fopen(filename, "w");
if (fp == NULL) {
printf("Error opening file\n");
exit(1);
}
// 将内存中的内容写入文件
for (i = 0; i < line_count; i++) {
if (i != line_to_delete - 1) {
fprintf(fp, "%s", lines[i]);
}
}
// 释放内存并关闭文件
for (i = 0; i < line_count; i++) {
free(lines[i]);
}
free(lines);
fclose(fp);
printf("Line %d has been deleted from file %s.\n", line_to_delete, filename);
return 0;
}
```
注意,上述代码中未进行错误处理,实际使用中应该考虑各种错误情况并进行相应的处理。
阅读全文