C ++ MoveFile, сообщающий ERROR_ACCESS_DENIED непоследовательно для перемещений каталогов на Windows Server

У меня возникла проблема с перемещением каталога в новое место, в частности, с помощью которого я создаю CreateDirectory, Вот код:

if (FALSE == CreateDirectory(strDestination, NULL))
{
dwError = GetLastError();
if (ERROR_ALREADY_EXISTS != dwError)
{
strError.Format("Error creating %s: %i", strDestination, dwError);
LogIt(strError);
}
}
if (FALSE == MoveFile(strSource, strDestination + strID))
{
dwError = GetLastError();
strError.Format("Error moving %s to %s: %i", strSource, strDestination + strID, dwError);
LogIt(strError);
}

Однако, если я вручную создаю каталог, я могу ввести этот путь в этот код, и он работает. Я сравнил настройки безопасности для этих двух каталогов и убедился, что они одинаковы, но все равно не работает. Что-то не так с моим кодом создания? Если я оставлю второй параметр как NULLразве он не должен предоставлять те же разрешения, что и при создании каталога вручную?

0

Решение

Если вы запускаете антивирус на компьютере, он может заблокировать новую папку, пока он проверяет ее / добавляет в чистый кэш. Это может вызвать периодические проблемы с синхронизацией, если, например, AV-драйвер перегружен другими действиями.

Чтобы проверить, что это происходит, вы можете отключить сканер при доступе вашего AV. Обходной путь в вашем коде — повторить (скажем) 2-3 раза с небольшой задержкой между ними.

Редактировать: поскольку OP подтвердил, что не может перейти на другой том, ответ заключается в использовании MoveFileEx () с флагом MOVEFILE_COPY_ALLOWED.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]