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

C remove() function doesn't delete target file in windows environment

我正在编写一个程序,要求用户输入文件名,如果不存在则创建它。在程序结束时,我想检查创建的程序是否为空,如果是,则将其删除。不删除它然后 运行 具有相同文件名的程序搞乱了检测输入的方式。

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

然后上网查了下,找到了一个方法,就是用fseek()走到文件末尾,然后用ftell()查看文件末尾是不是在位置 0,但这同样不起作用。

我回去多摸索了一下,发现问题可能是因为我没有先使用fclose(),所以我又尝试了前两种尝试的解决方案,这次一定要关闭在尝试删除文件之前。仍然没有骰子。

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

我完全不知道接下来要尝试什么。谁能指出我正确的方向?

以下是我尝试删除文件的方法(fp 是文件指针,file 是一个带有 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 应该 意味着它是成功的,但该文件仍然存在于目录中。我词穷了。

代码未到达 remove 语句。