删除文件与文件夹
在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;
}

删除目录: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;
}

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