MFC中提供了删除文件夹的一个封装函数 RemoveDirectory(LPCTSTR lpPathName),我们只要把要删除的文件夹的路径传进去就可以删除了,貌似一切如此简单。我象征性的建立一个文件夹,然后在程序中删除了它,呵呵,一下就成功了。正当我要转手去做另外的操作时,我喜欢乱尝试的毛病就鬼使神差的让我做了这么一件事,在这个文件夹下我添加了几个新的子文件夹以及一些文件,这下我再试我的程序时就出现问题了,删不掉了!!
原来-------RemoveDirectory(LPCTSTR lpPathName)欺骗了我,他只能删除空的文件夹,这下我有问题了,怎么才能删除一个文件夹,即便其中含有无数的子文件和子文件夹呢?
RemoveDirectory(LPCTSTR lpPathName) 的这种行为其实是情有可原的,它为我们的操作提供了一种安全级别的控制。
但我现在就想删除非空文件夹 , 怎么办呢????
递归删除!!
看到论坛上有人提出这一思想,我感觉很有道理,于是就基于这一思想,着手实现它!
首先将文件夹下所有内容删除,再调用RemoveDirectory(LPCTSTR lpPathName)不就可以实现了么!!
为此我专门写了一个函数来递归删除一个文件夹下的所有内容!
void myDeleteDirectory(CString directory_path) //删除一个文件夹下的所有内容
{
CFileFind finder;
CString path;
path.Format("%s/*.*",directory_path);
BOOL bWorking = finder.FindFile(path);
while(bWorking){
bWorking = finder.FindNextFile();
if(finder.IsDirectory() && !finder.IsDots()){//处理文件夹
myDeleteDirectory(finder.GetFilePath()); //递归删除文件夹
RemoveDirectory(finder.GetFilePath());
}
else{//处理文件
DeleteFile(finder.GetFilePath());
}
}
}
删除空的文件夹
void DeleteAllDirectory() //删除文件夹 包括非空的文件夹
{
//第一步 删除 该文件夹下所有文件
myDeleteDirectory("C://ForVcTest");
//第二步 删除该空文件夹
RemoveDirectory("C://ForVcTest");
}
经过以上两步即可实现包含文件的文件夹的删除