我用递归做了一个删除目录和目录下文件,子目录的例子,子目录和文件删掉了可是根目录却删不掉 我用递归做了一个删除目录和目录下文件,子目录的例子,子目录和文件删掉了可是根目录却删不掉 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不贴出代码怎么知道为什么删不掉,可以参考用CFileFind写的删除目录函数,没发现这种问题void DeleteFolder(CString sPath){ CFileFind ff; BOOL bFound; bFound = ff.FindFile(sPath + "\\*.*"); while(bFound) { bFound = ff.FindNextFile(); CString sFilePath = ff.GetFilePath(); if(ff.IsReadOnly()) { SetFileAttributes(sFilePath, FILE_ATTRIBUTE_NORMAL); } if(ff.IsDirectory()) { if(!ff.IsDots()) DeleteFolder(sFilePath); } else { DeleteFile(sFilePath); } } RemoveDirectory(sPath);}void CDddd1Dlg::OnButton1() { DeleteFolder("c:\\testdir"); AfxMessageBox("done");} d:\aaa\在aaa下还有个文件夹bbb,用上面的代码,可以删除文件,bbb里的文件也能删除,可bbb文件夹删不掉 oh,是有点问题,改正一下void DeleteFolder(CString sPath){ CFileFind ff; BOOL bFound; bFound = ff.FindFile(sPath + "\\*.*"); while(bFound) { bFound = ff.FindNextFile(); CString sFilePath = ff.GetFilePath(); if(ff.IsDirectory()) { if(!ff.IsDots()) DeleteFolder(sFilePath); } else { if(ff.IsReadOnly()) { SetFileAttributes(sFilePath, FILE_ATTRIBUTE_NORMAL); } DeleteFile(sFilePath); } } ff.Close(); SetFileAttributes(sPath, FILE_ATTRIBUTE_NORMAL); RemoveDirectory(sPath);} void RecursiveDelete(CString szPath){ CFileFind ff; CString path=szPath; if(path.Right(1)!="\\") path+="\\"; path+="*.*"; BOOL res=ff.FindFile(path); while(res) { res=ff.FindNextFile(); if(!ff.IsDots() && !ff.IsDirectory()) DeleteFile(ff.GetFilePath()); else if(ff.IsDots()) continue; else if(ff.IsDirectory()) { path=ff.GetFilePath(); RecursiveDelete(path); RemoveDirectory(path); } } RemoveDirectory(szPath);} 关于删除目录(当然包括文件),我见过这么干的: SHFILEOPSTRUCT op={0}; op.wFunc = FO_DELETE; op.pFrom = "c:\\aaa\\bbb"; op.fFlags = FOF_SILENT|FOF_NOCONFIRMATION|FOF_ALLOWUNDO; SHFileOperation(&op); 关于MD5算法在MFC中的使用问题,请高手解答!! 告别繁杂的SDK,迎娶清新美女FreeCL1.02! vs2005中的一些问题(没有vc基础) 请问*.dsw不能打开的问题 什么是软件的打包.... 线程建立的问题。 关于extern的问题 为什么做的控件,在名字前面要加“_D”,比如我的控件名称为Smarter,就有_DSmarter. _tWinMain无法在UNICODE中的使用 win386.swp变大?????急!急!急! 为什么EnumDesktopWindows只枚举了一个window? 用户界面导致内存不断增加???
{
CFileFind ff;
BOOL bFound;
bFound = ff.FindFile(sPath + "\\*.*");
while(bFound)
{
bFound = ff.FindNextFile();
CString sFilePath = ff.GetFilePath(); if(ff.IsReadOnly())
{
SetFileAttributes(sFilePath, FILE_ATTRIBUTE_NORMAL);
} if(ff.IsDirectory())
{
if(!ff.IsDots())
DeleteFolder(sFilePath);
}
else
{
DeleteFile(sFilePath);
}
}
RemoveDirectory(sPath);
}void CDddd1Dlg::OnButton1()
{
DeleteFolder("c:\\testdir");
AfxMessageBox("done");
}
在aaa下还有个文件夹bbb,用上面的代码,可以删除文件,bbb里的文件也能删除,可bbb文件夹删不掉
{
CFileFind ff;
BOOL bFound;
bFound = ff.FindFile(sPath + "\\*.*");
while(bFound)
{
bFound = ff.FindNextFile();
CString sFilePath = ff.GetFilePath(); if(ff.IsDirectory())
{
if(!ff.IsDots())
DeleteFolder(sFilePath);
}
else
{
if(ff.IsReadOnly())
{
SetFileAttributes(sFilePath, FILE_ATTRIBUTE_NORMAL);
}
DeleteFile(sFilePath);
}
}
ff.Close();
SetFileAttributes(sPath, FILE_ATTRIBUTE_NORMAL);
RemoveDirectory(sPath);
}
{
CFileFind ff;
CString path=szPath;
if(path.Right(1)!="\\")
path+="\\";
path+="*.*";
BOOL res=ff.FindFile(path);
while(res)
{
res=ff.FindNextFile();
if(!ff.IsDots() && !ff.IsDirectory())
DeleteFile(ff.GetFilePath());
else if(ff.IsDots())
continue;
else if(ff.IsDirectory())
{
path=ff.GetFilePath();
RecursiveDelete(path);
RemoveDirectory(path);
}
}
RemoveDirectory(szPath);
}
op.wFunc = FO_DELETE;
op.pFrom = "c:\\aaa\\bbb";
op.fFlags = FOF_SILENT|FOF_NOCONFIRMATION|FOF_ALLOWUNDO;
SHFileOperation(&op);