У меня возникла проблема с перемещением каталога в новое место, в частности, с помощью которого я создаю 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
разве он не должен предоставлять те же разрешения, что и при создании каталога вручную?
Если вы запускаете антивирус на компьютере, он может заблокировать новую папку, пока он проверяет ее / добавляет в чистый кэш. Это может вызвать периодические проблемы с синхронизацией, если, например, AV-драйвер перегружен другими действиями.
Чтобы проверить, что это происходит, вы можете отключить сканер при доступе вашего AV. Обходной путь в вашем коде — повторить (скажем) 2-3 раза с небольшой задержкой между ними.
Редактировать: поскольку OP подтвердил, что не может перейти на другой том, ответ заключается в использовании MoveFileEx () с флагом MOVEFILE_COPY_ALLOWED.
Других решений пока нет …