我刚刚做了一个小测试,这就是我做的:
我反复创建和删除一个目录,例如 d:\test。我这样做了大约 1000 次,并且总是会因为访问被拒绝而出现错误一段时间。
我的代码是这样写的:
TCHAR szError[MAX_PATH] = {0};
TCHAR lpszPath[MAX_PATH] = _T("d:\\test");
for(int i = 0; i != 1000; i++)
{
if (!CreateDirectory(lpszPath, NULL))
{
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), NULL, szError, MAX_PATH, NULL);
MessageBox(NULL, szError, _T("create directory error"), MB_OK);
cout << i << endl;
return 0;
}
SetFileAttributes(lpszPath, FILE_ATTRIBUTE_NORMAL);
if (!RemoveDirectory(lpszPath))
{
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), NULL, szError, MAX_PATH, NULL);
MessageBox(NULL, szError, _T("remove directory error"), MB_OK);
cout << i << endl;
return 0;
}
}
谁能告诉我为什么会发生此错误以及如何避免该错误?
最佳答案
请参阅 RemoveDirectory 文档;
“RemoveDirectory 函数在关闭时标记要删除的目录。因此,在关闭目录的最后一个句柄之前,不会删除该目录。”
这意味着,如果某些东西设法为您删除的目录创建句柄(在创建和删除之间),那么该目录实际上并未被删除,并且您会收到“拒绝访问”,
要解决此问题,请在删除之前重命名要删除的目录。
关于c++ - 重复创建和删除同一目录时拒绝访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15892295/