我这有一段删除文件夹的代码,在我用时,能删除文件夹里的文件,但删除文件夹本身时却不对,说是另一个进程正在使用这个文件?
BOOL CFileListView::DeleteDirectory(CString sDirectory)
{
CString sPath = sDirectory;
sPath += "\\*.*"; CFileFind finder;
CString sFileName;
BOOL bIsFindFile = finder.FindFile(sPath);
while (bIsFindFile)
{
bIsFindFile = finder.FindNextFile();
if (!finder.IsDots())
{
sFileName = finder.GetFilePath();
if (finder.IsDirectory())
{
::SetFileAttributes(sFileName, FILE_ATTRIBUTE_ARCHIVE);
if (!DeleteDirectory(sFileName))
{
return FALSE;
}
}
else
{
::SetFileAttributes(sFileName, FILE_ATTRIBUTE_ARCHIVE);
::DeleteFile(sFileName);
}
}
}
finder.Close();
::SetFileAttributes(sDirectory, FILE_ATTRIBUTE_ARCHIVE);
if (!::RemoveDirectory(sDirectory))//这里出错。
{
return FALSE;
}
return TRUE;
}
BOOL CFileListView::DeleteDirectory(CString sDirectory)
{
CString sPath = sDirectory;
sPath += "\\*.*"; CFileFind finder;
CString sFileName;
BOOL bIsFindFile = finder.FindFile(sPath);
while (bIsFindFile)
{
bIsFindFile = finder.FindNextFile();
if (!finder.IsDots())
{
sFileName = finder.GetFilePath();
if (finder.IsDirectory())
{
::SetFileAttributes(sFileName, FILE_ATTRIBUTE_ARCHIVE);
if (!DeleteDirectory(sFileName))
{
return FALSE;
}
}
else
{
::SetFileAttributes(sFileName, FILE_ATTRIBUTE_ARCHIVE);
::DeleteFile(sFileName);
}
}
}
finder.Close();
::SetFileAttributes(sDirectory, FILE_ATTRIBUTE_ARCHIVE);
if (!::RemoveDirectory(sDirectory))//这里出错。
{
return FALSE;
}
return TRUE;
}
解决方案 »
- GetClientRect()的问题
- 求Color2Gray程序代码
- vc环境中有没有画图的控件?
- Visual C++6.0中的时间控件的名称是?
- 我要取一个网页上的数据可以用url加参数命令取,但是那个网站要用用户登陆后才出现数据页面,否则就转到登陆页面,怎么才能模仿IE用socket发
- 如何读取开头几个字母是CTLTIF的pdb数据库文件格式
- 一个很菜的问题!
- ICON文件的格式
- RS232,如何设置起始位?
- 请问:lpDllEntryPoint = GetProcAddress(hLib,_T("DllRegisterServer"));中_T是什么意思?
- 关于ShellExecute的问题,很急~~~~~~
- 怎么样从filedialog继承一个类?
其实删除文件夹也可以这样实现:
删除目录
SHFILEOPSTRUCT op={0};
op.wFunc = FO_DELETE;
op.pFrom = "c:\\22";
op.fFlags = FOF_SILENT|FOF_NOCONFIRMATION|FOF_ALLOWUNDO;
SHFileOperation(&op);
{
CFileFind ff;
BOOL bFound;
bFound = ff.FindFile(szPath + "\\*.*");
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(szPath, FILE_ATTRIBUTE_NORMAL);
RemoveDirectory(szPath);}