Windows递归删除目录下所有文件-C实现
来源:互联网 发布:网络教育没有初中毕业 编辑:程序博客网 时间:2024/06/01 22:20
如有转载,请注明出处:http://blog.csdn.net/embedded_sky
Windows下删除制定文件夹下所有文件,如有目录则递归删除子目录下的文件。
网上找了一下,Windows下删除文件的API有libc库里的remove(),删除文件夹有rmdir(),但rmdir()不能删除子目录。如不考虑程序安全性,可以直接使用system+dos命令:
rmdir C:/super_bert/test/ /q /s
若不用dos命令,就只有自己动手了。
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <io.h>#include <direct.h>#include <errno.h>//判断是否是".."目录和"."目录inline bool is_special_dir(const char *path){ return strcmp(path, "..") == 0 || strcmp(path, ".") == 0;}//判断文件属性是目录还是文件inline bool is_dir(int attrib){ return attrib == 16 || attrib == 18 || attrib == 20;}//显示删除失败原因inline void show_error(const char *file_name = NULL){ errno_t err; _get_errno(&err); switch(err) { case ENOTEMPTY: printf("Given path is not a directory, the directory is not empty, or the directory is either the current working directory or the root directory.\n"); break; case ENOENT: printf("Path is invalid.\n"); break; case EACCES: printf("%s had been opend by some application, can't delete.\n", file_name); break; }}inline void get_file_path(const char *path, const char *file_name, char *file_path){ strcpy_s(file_path, sizeof(char) * _MAX_PATH, path); file_path[strlen(file_path) - 1] = '\0'; strcat_s(file_path, sizeof(char) * _MAX_PATH, file_name); strcat_s(file_path, sizeof(char) * _MAX_PATH, "\\*");}//递归搜索目录中文件并删除inline void delete_file(char *path){ _finddata_t dir_info; _finddata_t file_info; intptr_t f_handle; char tmp_path[_MAX_PATH]; if((f_handle = _findfirst(path, &dir_info)) != -1) { while(_findnext(f_handle, &file_info) == 0) { if(is_special_dir(file_info.name)){ continue;} if(is_dir(file_info.attrib))//如果是目录,生成完整的路径 { get_file_path(path, file_info.name, tmp_path); delete_file(tmp_path);//开始递归删除目录中的内容 tmp_path[strlen(tmp_path) - 2] = '\0'; if(file_info.attrib == 20) printf("This is system file, can't delete!\n"); else { //删除空目录,必须在递归返回前调用_findclose,否则无法删除目录 if(_rmdir(tmp_path) == -1) { show_error();//目录非空则会显示出错原因 } } } else { strcpy_s(tmp_path, path); tmp_path[strlen(tmp_path) - 1] = '\0'; strcat_s(tmp_path, file_info.name);//生成完整的文件路径 if(remove(tmp_path) == -1) { show_error(file_info.name); } } } _findclose(f_handle);//关闭打开的文件句柄,并释放关联资源,否则无法删除空目录 } else { show_error();//若路径不存在,显示错误信息 }return;}int main(int argc, char **argv){ delete_file("E:/test/super_bert/*"); system("pause"); return 0;}
0 0
- Windows递归删除目录下所有文件-C实现
- 递归删除文件夹目录下所有文件
- 递归删除目录下所有文件
- 递归删除目录下所有文件
- java实现递归删除目录及目录下所有文件,递归和非递归方式都有
- java递归删除目录下所有文件包括目录
- linux下递归删除目录下所有文件
- linux下递归删除目录下所有指定类型文件
- linux下递归删除目录下所有指定的文件
- linux下递归删除目录下所有指定类型文件
- C语言 递归地删除一个指定目录下所有指定类型的文件
- php中通过递归实现删除目录下的所有文件。
- C语言递归删除某个目录下所有的内容
- Linux命令:递归删除目录下所有exe文件
- php递归删除目录下的所有文件
- windows api 实现删除指定目录下的所有文件(包括子文件夹下的所有文件)
- windows api 实现删除指定目录下的所有文件(包括子文件夹下的所有文件)
- windows api 实现删除指定目录下的所有文件(包括子文件夹下的所有文件)
- java概述
- 复制屏幕的代码
- 读《富兰克林传》
- 使用python和pyqt开发一款简易打包工具
- sendfile函数
- Windows递归删除目录下所有文件-C实现
- android开发之自定义log工具
- PRML-系列二之2.2
- 自定义VIEW时抛出异常:ava.lang. NoClassDefFoundError: android .os.AsyncTask
- 运行crontab时出现hive:command not found和no module named argparse found解决办法
- python入门
- code::Blocks 中配置android x86的编译环境
- 属性化字符串在uilabel上的使用
- PyCharm + PyQt5 配置