C中的“remove()”函数不会删除所选文件

时间:2017-05-31 17:51:14

标签: c function file stream

我有这个功能:

void aggiornadatabase(void) {
    FILE* fp;
    int c=0;
    char str[30];
    int m;

    sprintf(str, "%s.csv", utenti[posizioneuser].id);
    printf("%s\n", str);
    fp = fopen(str, "w");
    if (fp == NULL)
        printf("Database error\n");
    else
        m = remove(str);

    if (m == 0)
        printf("Success\n");
    else
        printf("Unable to delete the File\n");

    fclose(fp);
}

当此函数执行时,它会删除所选.csv文件中的所有内容,但它不会删除文件本身(实际上它会打印“无法删除文件”)。

为什么会这样?

4 个答案:

答案 0 :(得分:5)

文件保持打开状态,删除打开的文件是实现定义的,因此删除可能成功也可能不成功。在尝试remove之前,您最好关闭文件。

答案 1 :(得分:2)

您的代码很乱,我认为最后gem install rmagick是给您这种奇怪行为的原因。首先,您应该始终初始化变量,在您的示例fclose(fp)中,在输入第二个m语句(应该在第一个if语句中)时会生成未定义的行为。

另外,请务必打开文件以便阅读而不是写作。

else

您不应该添加最后一个//sprintf(...) fp = open(str, "r"); if(fp == NULL) printf("Database error\n"); else { fp.close() if(remove(str)) printf("Unable to delete the file\n"); else printf("Delete successful\n"); } ,因为当您到达该点时,它已经关闭,或者它甚至没有首先打开。

答案 2 :(得分:0)

不要让我们猜测文件未被移除的原因,而是自己使用perror()函数来获取可读以及可能可理解的错误消息:< / p>

if (remove(str) == 0)
    printf("Success\n");
else
    perror("Unable to delete the file");

另请注意,您的逻辑有问题:如果无法打开DB文件进行写入,则会打印消息"Database error\n";并且m将保持未设置状态,导致未定义的行为!

答案 3 :(得分:0)

在remove()中使用文件的路径/名称字符串而不是指向文件的指针应该有效。