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