我只是进行了一些testing,这就是我做的:
例如,我反复创build并删除一个目录,例如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函数在关闭时标记要删除的目录。因此,直到目录的最后一个句柄关闭,该目录才被删除。
这意味着如果某个东西能够创建一个到你删除的目录的句柄(在创建和删除之间),那么这个目录实际上并没有被删除,并且你得到了“拒绝访问”
要解决此问题,请在删除之前重命名要删除的目录。