递归删除非空目录遇到的有关问题
递归删除非空目录遇到的问题C/C++ codevoid del_file(const char *path) {struct dirent* ent NULLDIR
递归删除非空目录遇到的问题
C/C++ codevoid del_file(const char *path) { struct dirent* ent = NULL; DIR *p_dir; p_dir = opendir(path); //若非目录文件直接删除 if (p_dir == NULL) { unlink(path); return; } else if(NULL == readdir(p_dir)) { rmdir(path); } while(NULL != (ent = readdir(p_dir))) { std::string _path(path); std::string _dirName(ent->d_name); std::string fulldirpath = _path + "/" +_dirName; del_file(fulldirpath.c_str()); } }
问题有三:
1.每当我传一个完整的文件名给函数时(例:/home/y/a.c)时,可以成功删除,但奇怪的时竟然一并将我的源码文件所在目录也清空。
2.废话不多问,如果可以请哪个老师,修改的源码的不对之处。
3.我知道用SYSTEM(‘rm -f’)可以,但我需要的是这个递归函数,所以请不要再讨论那种方法。
另外,请您不要只留下只言片语,一概而过。这样不但对解决问题没帮助,只会让人觉得傲慢。谢谢
[解决办法]closedir(p_dir);//删除前需要关闭
[解决办法]system("dir /b /a-d c:\\*.* >d:\\allfiles.txt");
//读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字
system("dir /b /ad c:\\*.* >d:\\alldirs.txt");
//读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字
请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。