參考:codeguru.com/forum/showthread.php?t=239271爲什麼RemoveDirectory函數不會刪除最頂層的文件夾?
當使用下面的功能刪除文件夾時,除最上面的文件夾外,所有文件夾,子文件夾和文件都將被刪除。對於路徑c:\folder1\folder2
說,除folder2
之外,folder2
之下的所有東西都被刪除。
BOOL DeleteDirectory(const TCHAR* sPath)
{
HANDLE hFind; // file handle
WIN32_FIND_DATA FindFileData;
TCHAR DirPath[MAX_PATH];
TCHAR FileName[MAX_PATH];
_tcscpy(DirPath,sPath);
_tcscat(DirPath,_T("\\"));
_tcscpy(FileName,sPath);
_tcscat(FileName,_T("\\*")); // searching all files
int nRet = 0;
hFind = FindFirstFile(FileName, &FindFileData); // find the first file
if(hFind != INVALID_HANDLE_VALUE)
{
do
{
if(IsDots(FindFileData.cFileName))
continue; //if not directory continue
_tcscpy(FileName + _tcslen(DirPath), FindFileData.cFileName);
if((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
// we have found a directory, recurse
if(!DeleteDirectory(FileName))
break; // directory couldn't be deleted
}
else
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
_wchmod(FileName, _S_IWRITE); // change read-only file mode
if(!DeleteFile(FileName))
break; // file couldn't be deleted
}
}while(FindNextFile(hFind, &FindFileData));
nRet = FindClose(hFind); // closing file handle
}
return RemoveDirectory(sPath); // remove the empty (maybe not) directory and returns zero when RemoveDirectory function fails
}
任何幫助找到問題的讚賞。 在調試過程中,我注意到,FindClose
功能被成功關閉文件句柄,但GetLastError
返航32(「因爲它正由另一個進程的進程無法訪問文件」),但我有一個過程的探索者試圖後沒有任何線索。
在DeleteFile失敗後立即調用GetLastError並找出它給出的錯誤。這應該可以幫助你解決這個問題。 – Jay 2012-03-13 12:15:36