删除文件与文件夹

在ccleaner中,清理操作就是删除文件或文件夹,这通过remove或rmdir函数来实现。

删除文件:remove

remove()函数用于删除一个指定的文件,它定义于<stdio.h>头文件中,函数原型为:

int remove(const char *filename);

参数 filename 指定要被删除的文件名,可以是绝对路径,也可以是相对路径,如:

remove("c:\\user\\foo.dat");  // 使用绝对路径,删除C盘user文件夹下的foo.data文件
remove("foo.txt");            // 使用相对路径,删除当前目录下的foo.txt
remove("./settings/ui.cfg");  // 使用相对路径,删除当前目录下settings子目录中的ui.cfg文件

删除操作成功时返回0;否则返回-1,此时C程序运行时全局变量errno指出了错误原因。当文件不存在,或被其它程序打开占用等情形下,remove操作将会失败。

#include <stdio.h>

void my_remove(const char *filename)
{
    int result = remove(filename);

    if (result != 0)
    {
        printf("File deletion failed: %s --> error: %d\n", filename, errno);
    }
    else
    {
        printf("File deleted successfully: %s\n", filename);
    }
}

int main()
{
    my_remove("c:\\user\\face.jpg");
    my_remove("fun.h");
    my_remove("./fun.c");
    return 0;
}

glimix.com

删除目录:rmdir

rmdir()可以删除指定的空文件夹,在Windows下它定义于<direct.h>头文件中,原型为:

int rmdir(const char *path);

参数 path 指定要被删除的文件夹路径,绝对与相对路径都可以,如:

rmdir("c:\\pics");
rmdir("foo");
rmdir("./settings/uis");

删除操作成功时返回0;否则返回-1,当目录是根目录、特定目录(.与..)、非空目录,或被锁定占用时,操作失败。

#include <stdio.h>
#include <direct.h>

void my_rmdir(const char *path)
{
    int result = _rmdir(path);

    if (result != 0)
    {
        printf("File deletion failed: %s\n", path);
    }
    else
    {
        printf("File deleted successfully: %s\n", path);
    }
}

int main()
{
    my_rmdir("c:\\");           // 无法删除:根目录
    my_rmdir(".");              // 无法删除:特定目录
    my_rmdir("c:\\user\\pics"); // 无法删除:不存在的目录
    my_rmdir("test1");          // 无法删除:非空目录
    my_rmdir(".\\test2");       // 可以删除:空目录
    return 0;
}

glimix.com

练习

Ex1 实现函数删除一个没有子目录的非空目录。

陕ICP备2025078817号-1 陕公网安备61011202001108号