#include <stdio.h>
#include <stdlib.h>
// 函数定义:删除文件中的指定行
void deleteLine(const char* filename, int line) {
FILE* fp_in, * fp_out; // 定义输入和输出文件指针
int count = 1; // 用于计数的变量,从1开始因为第一行是1而不是0
char ch; // 用于读取单个字符的变量
char temp_filename[256]; // 定义临时文件的名称
// 创建临时文件的名称,原文件名加上.tmp后缀
sprintf(temp_filename, "%s.tmp", filename);
// 以只读方式打开原始文件
fp_in = fopen(filename, "r");
// 以写入方式打开临时文件
fp_out = fopen(temp_filename, "w");
// 检查文件是否成功打开
if (!fp_in || !fp_out) {
printf("Error opening files\n");
exit(1); // 如果文件打开失败,则退出程序
}
// 逐字符读取原始文件的内容
while ((ch = fgetc(fp_in)) != EOF) {
// 当读取到换行符时,行数加1
if (ch == '\n') {
count++;
}
// 如果当前行不是要删除的行,则将该字符写入临时文件
if (count != line) {
fputc(ch, fp_out);
}
}
// 关闭输入和输出文件
fclose(fp_in);
fclose(fp_out);
// 删除原始文件
remove(filename);
// 将临时文件重命名为原始文件名
rename(temp_filename, filename);
// 输出成功删除行的消息
printf("Successfully deleted line %d from file %s\n", line, filename);
}
int main() {
const char* filename = "tmp.txt"; // 定义要操作的文件名
int line = 3; // 定义要删除的行号
// 调用函数删除指定行
deleteLine(filename, line);
return 0;
}
如果出现无法打开的情况尝试将路径"tmp.txt"替换为"tmp.txt.txt"