删除目录功能访问被拒绝
Remove Directory function access denied
我正在使用下面的 C++ 代码从特定路径删除临时文件。
C:\Users\falcon\AppData\Local\Temp\~GPG.TMP\
当 ~GPG.TMP 文件夹中存在一些文件时,它首先删除,最后删除文件夹本身。在这最后一步 RemoveDirectory(sPathName)
中,虽然我没有收到任何异常,但该文件夹实际上并未被删除,但是当我尝试访问它时(无论是外部还是以编程方式),我收到错误号 13,即 "Permission denied"。为什么会这样?
void CFileOperation::DoDelete(CString sPathName)
{
CFileFind ff;
CString sPath = sPathName;
if (CheckPath(sPath) == PATH_IS_FILE)
{
if (!CanDelete(sPath))
{
m_bAborted = true;
return;
}
if (!DeleteFile(sPath)) throw new CFExeption(GetLastError());
return;
}
PreparePath(sPath);
sPath += "*.*";
BOOL bRes = ff.FindFile(sPath);
while(bRes)
{
bRes = ff.FindNextFile();
if (ff.IsDots()) continue;
if (ff.IsDirectory())
{
sPath = ff.GetFilePath();
DoDelete(sPath);
}
else DoDelete(ff.GetFilePath());
}
ff.Close();
if (!RemoveDirectory(sPathName) && !m_bAborted) {
throw new CFExeption(GetLastError());
}
}
根据 MSDN:
RemoveDirectory
函数将目录标记为在关闭时删除。因此,在目录的最后一个句柄关闭之前,目录不会被删除。
而且,恕我直言,错误 13 是 ERROR_INVALID_DATA
。
我正在使用下面的 C++ 代码从特定路径删除临时文件。
C:\Users\falcon\AppData\Local\Temp\~GPG.TMP\
当 ~GPG.TMP 文件夹中存在一些文件时,它首先删除,最后删除文件夹本身。在这最后一步 RemoveDirectory(sPathName)
中,虽然我没有收到任何异常,但该文件夹实际上并未被删除,但是当我尝试访问它时(无论是外部还是以编程方式),我收到错误号 13,即 "Permission denied"。为什么会这样?
void CFileOperation::DoDelete(CString sPathName)
{
CFileFind ff;
CString sPath = sPathName;
if (CheckPath(sPath) == PATH_IS_FILE)
{
if (!CanDelete(sPath))
{
m_bAborted = true;
return;
}
if (!DeleteFile(sPath)) throw new CFExeption(GetLastError());
return;
}
PreparePath(sPath);
sPath += "*.*";
BOOL bRes = ff.FindFile(sPath);
while(bRes)
{
bRes = ff.FindNextFile();
if (ff.IsDots()) continue;
if (ff.IsDirectory())
{
sPath = ff.GetFilePath();
DoDelete(sPath);
}
else DoDelete(ff.GetFilePath());
}
ff.Close();
if (!RemoveDirectory(sPathName) && !m_bAborted) {
throw new CFExeption(GetLastError());
}
}
根据 MSDN:
RemoveDirectory
函数将目录标记为在关闭时删除。因此,在目录的最后一个句柄关闭之前,目录不会被删除。
而且,恕我直言,错误 13 是 ERROR_INVALID_DATA
。