删除文本文件的一行

时间:2013-11-29 19:44:29

标签: c arrays pointers text-files

所以,我试图从编号的文本文件中删除文件。 \ n后面的每个条目都是一个新数字。我试图获取文件,将每一行存储在一个字符串中,然后通过省略不需要的行并对其余行进行fprinting来创建一个新文件。不幸的是,指针给我带来了麻烦。它会删除一个,并将另一个返回到正确的位置,但不会返回正确的字符串或返回空白文件。

fp=fopen("data.txt", "r+");
fpo=fopen("out.txt", "w");

printf("Please enter number of the student whose data you would like to delete.\n");

scanf("%d", &i);

while(fgets(str, 128, fp)){
    if((atoi(str)!=i))
    {
        fputs(str, fpo);
    }
}
fclose(fp);

fp=fopen("data.txt","w");

while(fgets(str, 128, fpo)){
    if((atoi(str)!=i))
    {
        fputs(str, fp);
    }
}
fclose(fp);

fclose(fpo);

1 个答案:

答案 0 :(得分:2)

你所拥有的是多余的复杂(并且不适用于大文件,浪费内存)。为什么不直接复制文件,只是不复制然后要排除?

FILE *f_in = fopen("infile.txt", "r");
FILE *f_out = fopen("outfile.txt", "w");
// ...error checking comes here...

char buf[LINE_MAX];

while (fgets(buf, sizeof buf, f_in)) {
    if (!(/* omission condition here */)) {
        fputs(buf, f_out);
    }
}

fclose(f_in);
fclose(f_out);