C remove()函数不会在Windows环境中删除目标文件

时间:2018-11-30 02:22:56

标签: c windows file-pointer

我正在编写一个程序,要求用户提供文件名,如果文件名不存在,则创建它。在程序末尾,我要检查创建的程序是否为空,如果为空,则将其删除。不删除它,然后使用相同的文件名运行该程序会弄乱检测输入的方式。

我尝试使用rewind()返回到开头,然后检查feof()来查看文件的开头是否是EOF字符,但这没用。

然后,我进行了一些在线搜索,找到了一种方法,该方法使用fseek()转到文件的末尾,然后用ftell()检查文件的末尾是否在位置0 ,但这仍然行不通。

我回过头去做了更多的探索,发现问题可能是因为我没有先使用fclose(),所以我再次尝试了前两个尝试的解决方案,这次确保关闭了文件尝试删除它之前。仍然没有骰子。

我尝试检查errno的设置,并得到了2: No such file or directory。这显然是错误的,因为如果是这种情况,那意味着我已经实现了我的目标,并且当我检查工作目录时,文件仍然存在。

我完全不知道下一步该怎么做。谁能指出我正确的方向?

以下是我尝试删除文件的方式(fp是文件指针,而file是char指针,其名称为fp指向的文件名):

尝试1:

rewind(fp);
if(feof(fp)){
    remove(file);
}

尝试2:

fseek(fp, 1, SEEK_END);
long size = ftell(fp);
if(size == 0){
    remove(file);
}

尝试3:

fseek(fp, 1, SEEK_END);
long size = ftell(fp);
fclose(fp);
if(size == 0){
    remove(file);
}

尝试4:

rewind(fp);
int empty = 0;
if(feof(fp)){
    empty = 1;
}
fclose(fp);
if(empty == 1){
    remove(file);
}

更新:这是几个MCVE,每种方法一个。

#include <stdio.h>
#include <errno.h>

int main() {
    FILE *fp;
    char file[40];
    scanf(" %[^\n]s", file);
    fp = fopen(file, "r");
    if(fp == NULL){
        fp = fopen(file, "w");
    int result;
    rewind(fp);
    int empty = 0;
    if(feof(fp)){
        empty = 1;
    }
    fclose(fp);
    if(empty == 1){
        result = remove(file);
    }
    printf("%d\n", result);
    printf("%d\n", errno);
    return 0;
}

版本2:

#include <stdio.h>
#include <errno.h>

int main() {
    FILE *fp;
    char file[40];
    scanf(" %[^\n]s", file);
    fp = fopen(file, "r");
    if(fp == NULL){
        fp = fopen(file, "w");
    int result;
    fseek(fp, 1, SEEK_END);
    long size = ftell(fp);
    fclose(fp);
    if(size == 0){
        result = remove(file);
    }
    printf("%d\n", result);
    printf("%d\n", errno);
    return 0;
}

更新2:

我刚刚意识到,当我制作MCVE时,当我运行它们时,result返回了0,这应该表示成功,但是文件仍在目录中。我不知所措。

1 个答案:

答案 0 :(得分:0)

代码未到达remove语句。