我正在尝试删除c程序中的文件。假设该文件位于源文件的当前目录中。我搜索了很多,但没有得到任何解决方案。每个人都建议使用remove()
功能。
这是我的源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
int delete_status;
char del[50];
printf("Enter a file name to delete it: ");
gets(del);
delete_status = remove(del);
if(delete_status!=0) {
printf("File can not be deleted!\nFile does not exist in current directory\n");
}
else printf("File %s has been deleted successfully!\n", del);
return 0;
}
有没有办法在不使用remove()
功能的情况下删除文件。我想手动编码而不使用任何其他stl内置函数。
答案 0 :(得分:8)
答案 1 :(得分:2)
您可以查看answer。您应该尝试阅读系统编程手册,以便了解INTERNAL_SYSCALL
等用途。
您可以浏览帖子中提到的功能,例如unlink()
等。
编辑:实际上你最终会在某种程度上使用系统调用。您可能尝试从不同的抽象级别实现删除文件的操作。(remove()系统调用也将使用INTERNAL_SYSCALL,除了系统调用之外)。
现在从低级别删除文件并不意味着我们正在删除某些内容。我们只是将空间视为可用空间(内存空闲池),然后释放与该文件相关的任何元数据。为了实现这一点,您需要实现一个分配内存的文件系统,删除它......使用设备级指令。
答案 2 :(得分:1)
为文件调用unlink
,为目录调用rmdir
。您可以轻松检查哪个文件正在使用stat
,然后调用正确的函数。
$ git checkout -b <new_branch_name>
包括struct stat sb;
if (!stat(filename, &sb))
{
if (S_ISDIR(sb.st_mode))
rmdir(filename);
else
unlink(filename);
}
的{{3}}和<sys/stat.h>
的S_ISDIR
,stat
和rmdir
的{{3}}。
哦,根据你的评论:
你们所有人都不理解我的需求和要求。我知道使用标准库函数删除文件是可行的,如remove(),unlink(),rm()等。但我想手动编码而不使用任何内置函数。
欢乐再现<unistd.h>
。
答案 3 :(得分:0)
我认为你需要知道的是unlink()
功能。要删除文件,remove()
会在内部调用unlink()
本身。查看man page了解详情。
但是,我建议您先使用fgets()
更改gets()
。此外,int main()
应为int main(void)
。
答案 4 :(得分:-2)
使用system():
第一部分:(删除文件)
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fp;
int delete_status;
char path[100],order[]="del ";//del for delete file, if change del to rd is delete folder(**Code at part 2)
printf("Enter a path of file to delete it: ");
gets(path);
strcat(order,path);//Order
fp = fopen(path,"r");
if(fp != NULL){//Check file whether or not exist
fclose(fp);
system(order);//Del file
printf("Delete successfully");
}else{
perror("ERROR");
fclose(fp);
}
return 0;
}
例如,您要删除1.txt.Then,您可以将c程序放在同一个文件中,然后输入1.txt或输入文件的整个路径。(例如C :\用户\桌面\ 1.txt的)
第二部分:(删除文件夹)
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fp;
int delete_status,i = 1;
char path[100],order[] = "rd ";//del -> rd
printf("Enter a path of file to delete it: ");
gets(path);
strcat(order,path);
system(order);
return 0;
}