删除文件夹(非空目录)及其中所有文件的思路及源代码
2011-04-29 22:21
501 查看
在MFC中没有提供API函数删除非空文件夹 A(目录),所以要想删除一个非空文件夹(目录)必须先删除里面的文件。
这里需要注意一个问题,如果非空文件夹(目录)下还有文件夹(目录)AA:
1、如果文件夹 AA是空的,那就好办,直接RemoveDirectory()搞定。
2、如果 AA不是空的呢?......如果你想得比较深一点的话,应该会想到,万一 AA还有AAA,AAA还有AAAA呢?...有点恐怖,╮(╯3╰)╭
是的,你此刻应该想到了递归吧,好的,递归先暂时不管,回到正题。
目的还是只有一个,删除非空文件夹 A!!!
既然如此,那么我们还是只好写一个小小的算法删除里面的数据噢,对的,就是你刚才想到的递归!:-)
下面是网上很流行的一个思路及其代码:(不是我写的 :-) )
//删除文件夹目录(非空)
bool DeleteDirectory(char* sDirName)
{
CFileFind tempFind;
char sTempFileFind[MAX_PATH] ;
sprintf(sTempFileFind,"%s\\*.*",sDirName);
BOOL IsFinded = tempFind.FindFile(sTempFileFind);
while (IsFinded)
{
IsFinded = tempFind.FindNextFile();
if (!tempFind.IsDots())
{
char sFoundFileName[MAX_PATH];
strcpy(sFoundFileName,tempFind.GetFileName().GetBuffer(MAX_PATH));
if (tempFind.IsDirectory())
{
char sTempDir[MAX_PATH];
sprintf(sTempDir,"%s\\%s",sDirName,sFoundFileName);
DeleteDirectory(sTempDir); // 嵌套函数
}
else
{
charsTempFileName[MAX_PATH];
sprintf(sTempFileName,"%s\\%s",sDirName,sFoundFileName);
DeleteFile(sTempFileName); // DeleteFile(sTempFileName)貌似也行的
}
}
}
tempFind.Close();
if(!RemoveDirectory(sDirName))
{
return FALSE;
}
return TRUE;
}
函数说明:
1、要删除的目录通过参数char * sDirName传递进去,可以是相对路径的,比如“.\\tmp”;
2、FindFile 函数是用来查找是否在指定的目录A 下存在子文件Aa 及文件夹AA,当找到返回真;
3、FindNextFile MSDN中的返回值定义是:Nonzero indicates success. Zero indicates failure. To get extended error information, call GetLastError. If no matching files can be found, the GetLastError function returns ERROR_NO_MORE_FILES.(很多XXNextXX函数都是先要XXFirstXX一次的,这里是FindFile 算例外麽?)
4、IsDots 函数,熟悉dos 环境的童鞋都知道一个目录下存在“.”和“..”(还没想起麽?自己去输入一个“dir”命令看看就知道了),“.”代表上一层目录,“..”代表本层目录。所以呢在查找文件的时候应首先过滤掉这两个特殊目录。如果你逐步调试这个函数的时候你会发现每进一个新的目录查找都会首先多执行两次if(!tempFind.IsDots)。
5、RemoveDirectory 函数只能删除空文件夹,最后记得调用一次才能保证完成任务。
ps:我不记得代码是在哪里找的了,我在这里感谢无私的作者! :-)
这里需要注意一个问题,如果非空文件夹(目录)下还有文件夹(目录)AA:
1、如果文件夹 AA是空的,那就好办,直接RemoveDirectory()搞定。
2、如果 AA不是空的呢?......如果你想得比较深一点的话,应该会想到,万一 AA还有AAA,AAA还有AAAA呢?...有点恐怖,╮(╯3╰)╭
是的,你此刻应该想到了递归吧,好的,递归先暂时不管,回到正题。
目的还是只有一个,删除非空文件夹 A!!!
既然如此,那么我们还是只好写一个小小的算法删除里面的数据噢,对的,就是你刚才想到的递归!:-)
下面是网上很流行的一个思路及其代码:(不是我写的 :-) )
//删除文件夹目录(非空)
bool DeleteDirectory(char* sDirName)
{
CFileFind tempFind;
char sTempFileFind[MAX_PATH] ;
sprintf(sTempFileFind,"%s\\*.*",sDirName);
BOOL IsFinded = tempFind.FindFile(sTempFileFind);
while (IsFinded)
{
IsFinded = tempFind.FindNextFile();
if (!tempFind.IsDots())
{
char sFoundFileName[MAX_PATH];
strcpy(sFoundFileName,tempFind.GetFileName().GetBuffer(MAX_PATH));
if (tempFind.IsDirectory())
{
char sTempDir[MAX_PATH];
sprintf(sTempDir,"%s\\%s",sDirName,sFoundFileName);
DeleteDirectory(sTempDir); // 嵌套函数
}
else
{
charsTempFileName[MAX_PATH];
sprintf(sTempFileName,"%s\\%s",sDirName,sFoundFileName);
DeleteFile(sTempFileName); // DeleteFile(sTempFileName)貌似也行的
}
}
}
tempFind.Close();
if(!RemoveDirectory(sDirName))
{
return FALSE;
}
return TRUE;
}
函数说明:
1、要删除的目录通过参数char * sDirName传递进去,可以是相对路径的,比如“.\\tmp”;
2、FindFile 函数是用来查找是否在指定的目录A 下存在子文件Aa 及文件夹AA,当找到返回真;
3、FindNextFile MSDN中的返回值定义是:Nonzero indicates success. Zero indicates failure. To get extended error information, call GetLastError. If no matching files can be found, the GetLastError function returns ERROR_NO_MORE_FILES.(很多XXNextXX函数都是先要XXFirstXX一次的,这里是FindFile 算例外麽?)
4、IsDots 函数,熟悉dos 环境的童鞋都知道一个目录下存在“.”和“..”(还没想起麽?自己去输入一个“dir”命令看看就知道了),“.”代表上一层目录,“..”代表本层目录。所以呢在查找文件的时候应首先过滤掉这两个特殊目录。如果你逐步调试这个函数的时候你会发现每进一个新的目录查找都会首先多执行两次if(!tempFind.IsDots)。
5、RemoveDirectory 函数只能删除空文件夹,最后记得调用一次才能保证完成任务。
ps:我不记得代码是在哪里找的了,我在这里感谢无私的作者! :-)
相关文章推荐
- [VC/MFC]删除文件夹(非空目录)及其中所有文件的源代码
- 删除文件夹(非空目录)及其中所有文件
- VC删除文件夹(非空目录)及其中所有文件
- 如何删除文件夹下所有的文件(包括非空目录和文件)????
- PHP删除指定目录下所有文件夹以及文件
- Windows 强制删除文件及文件夹命令 一、删除文件或目录CMD命令: rd/s/q D:\app (强制删除文件文件夹和文件夹内所有文件)del/f/s/q D:\app.txt (强
- 批量删除一个目录下所有的文件夹和文件
- Linux Shell删除某一个目录下的所有文件夹(保留其他文件)
- JAVA处理文件(新建目录,新建文件,删除文件,删除文件夹,删除文件夹里面的所有文件,复制单个文件复制整个文件夹内容)
- Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容
- 删除目录和目录下得所有文件和文件夹
- 删除某目录下的所有文件以及删除文件夹
- [No000073]C#直接删除指定目录下的所有文件及文件夹(保留目录)
- FAQ2004:删除非空目录下所有文件
- 递归删除一个非空目录及其下所有文件和目录
- 遍历目录下所有文件夹和文件-------递归删除空目录
- C# 删除、遍历指定目录下的所有指定文件、文件夹
- Android 删除目录下的所有文件以及文件夹及遍历文件夹下面的文件
- 这是一个定时脚本,主要功能是遍历该文件夹下的所有文件并存储到数组,对数据中的文件进行操作,一个一个移动到指定的目录下,并删除原有文件
- C#直接删除指定目录下的所有文件及文件夹(保留目录)