c - 从 C 文件中删除最后一行 - 创建空行

标签 c

我想删除文本文件中的给定行,所以我使用一个临时文件来写入除我们要删除的行之外的所有行。

除了文件的最后一行,一切都很好:当我想删除最后一行时,结果是一个空行来代替被删除的行,但它应该什么都没有,而不是空行

char line[255];
unsigned int countline=0;
unsigned int linetodelete;//fixed by the user

FILE *file=fopen(filename,"r");
FILE *filetemp=fopen("__tempfile__","w");

while(fgets(line,255,file)!=NULL){
    if(countline!=linetodelete)
        fputs(line,filetemp);
    countline++;
}

fclose(file);
fclose(filetemp);

file=fopen(filename,"w");
filetemp=fopen("__tempfile__","r");

while(fgets(line,255,filetemp)!=NULL)
    fputs(line,file);

fclose(file);
fclose(filetemp);
remove("__tempfile__");

文件示例:(我添加行号来说明我们可以在文件中看到的内容)

000 line0
001 line1
002 line2

请求删除第 1 行(001)时的结果:

000 line0
001 line2

要求删除第 2 行(002)时的结果:

000 line0
001 line1
002

看到空白行了吗?为什么是这样 ?如何处理?谢谢

编辑:精度

#include <stdio.h>
#include <stdlib.h>

void deleteline(const char *filename,unsigned int linetodelete){
    FILE *file=fopen(filename,"r");
    FILE *filetemp=fopen("__tempfile__","w");

    char line[255];
    unsigned int countline=0;

    while(fgets(line,255,file)!=NULL){
        if(countline!=linetodelete)
            fputs(line,filetemp);
        countline++;
    }
    fclose(file);
    fclose(filetemp);
    rename("__tempfile__",filename);
}
void print(const char *filename){
    FILE *file=fopen(filename,"r");

    char line[255];
    unsigned int countline=0;

    while(fgets(line,255,file)!=NULL){
        printf("%03d ", countline);
        printf("%s",line);
        countline++;
    }
    printf("\r\n");
    fclose(file);
}
int main(){
    printf("before\n");
    print("test.txt");
    deleteline("test.txt",2);
    printf("after\n");
    print("test.txt");
}

之前:

cat -n test.txt 
1   line0 
2   line1 
3   line2

之后:

cat -n test.txt
1   line0 
2   line1 

这是我在文件编辑器中得到的:

http://imgur.com/8Wbiwk2

术语:

http://imgur.com/WGNSmgf

最佳答案

你可以使用这个转变:

if(countline!=linetodelete){
    char *p = line;
    p[strlen(p)-1] = 0;
    if(countline == 0){
        fprintf(filetemp, "%s", p);
    }
    else{
        fprintf(filetemp, "\n%s", p);
    }
}

这样,您就可以避免文件末尾出现空行。

关于c - 从 C 文件中删除最后一行 - 创建空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40899979/

相关文章:

卡西欧计算器编程

c - 从 C 函数返回局部变量

C 编程 : Saving value in for loop and finding minimum

javascript - 如何在C中建立javascript和cgi之间的通信 channel ?

c - 将 32 位值分配给 64 位变量并保证前 32 位在 C 中为 0 的最佳方法

从 C : errors 调用 Lua 脚本

c - 如何删除字符串中每一次出现的元音

c - 简单的脚本或命令*替换*杂散 "\\n"与 "\n"

c++ - 使用 WinAPI 进行夏令时和 UTC 到本地时间的转换

c - 如何让小数点的值只显示在数字中?