博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归地删除目录
阅读量:5165 次
发布时间:2019-06-13

本文共 2285 字,大约阅读时间需要 7 分钟。

转自:

写程序时用到一个删除目录的功能,但C库函数提供的_rmdir() 只能删除空目录,在网上搜索了一下也没得到满意的答案,于是就自己写了个小程序,递归地删除目录下的内容,最后删除目录本身。

主要用到了以下函数:

_access(); /*判断目录是否存在*/

_chdir(); /*改变当前工作目录*/

_findfirst(); /*在目录下查找第一个文件或文件夹*/

_findnext(); /*在目录下查找下一个文件或文件夹*/

_findclose(); /*结束一个查找操作*/

remove(); /*删除一个文件*/

_rmdir(); /*删除一个空目录*/

 

代码如下(下面的程序将直接删除文件或文件夹,而不是移到回收站,虽然已经多次测试,但为了安全起见,准备调试下面程序的朋友请做好备份,或将删除文件和文件夹的函数替换为输出文件名):

#include "io.h"#include "direct.h"#include 
using std::cin;using std::cerr;using std::cout;using std::endl;#include
using std::string;void empty_directory(/*const char* dirName*/);int main(){ string path; cout << "Input name of the directory you want to remove: "; cin >> path; if (_access(path.c_str(), 06) == -1) { cerr << "error: directory does not exist." << endl; exit(-1); } if (path.at(path.length() - 1) != '\\') { path += '\\'; } _chdir(path.c_str()); empty_directory(); _chdir(path.c_str()); _chdir(".."); _rmdir(path.c_str()); return 0;}void empty_directory( /*const char* dirName*/ ){ _finddata_t fileinfo; memset(&fileinfo, 0x0, sizeof(fileinfo)); intptr_t iFind = _findfirst("*", &fileinfo); if (iFind == -1) { cerr << "error: _findfirst failed." << endl; return; } /* process the first item */ if (fileinfo.name[0] != '.') { if ((fileinfo.attrib & _A_SUBDIR) != 0) { /* process directory */ _chdir(fileinfo.name); empty_directory(/*fileinfo.name*/); _chdir(".."); _rmdir(fileinfo.name); } else { /* process file */ remove(fileinfo.name); } } while (_findnext(iFind, &fileinfo) == 0) { if (fileinfo.name[0] != '.') { if ((fileinfo.attrib & _A_SUBDIR) != 0) { /* process directory */ _chdir(fileinfo.name); empty_directory(/*fileinfo.name*/); _chdir(".."); _rmdir(fileinfo.name); } else { /* process file */ remove(fileinfo.name); } } } _findclose(iFind);}

 

 

 

 

转载于:https://www.cnblogs.com/liuyunfeifei/p/3259258.html

你可能感兴趣的文章
BZOJ 1251: 序列终结者 [splay]
查看>>
【UVA】434-Matty&#39;s Blocks
查看>>
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
使用Reporting Services时遇到的小问题
查看>>
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Day03:Selenium,BeautifulSoup4
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
35. Search Insert Position(C++)
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
有关快速幂取模
查看>>
Linux运维必备工具
查看>>
字符串的查找删除
查看>>
NOI2018垫底记
查看>>
快速切题 poj 1002 487-3279 按规则处理 模拟 难度:0
查看>>
Codeforces Round #277 (Div. 2)
查看>>