不使用remove()函数如何在C程序中删除文件

时间:2015-04-19 05:20:22

标签: c file

我正在尝试删除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内置函数。

5 个答案:

答案 0 :(得分:8)

您可以将remove()替换为unlink()(对于文件)和rmdir()(对于目录)。

答案 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_ISDIRstatrmdir的{​​{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;
}