[英]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
指向的文件名的char指针。):
尝试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
语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.