Отказ в доступе к перемещению файла, вызванный настройками проекта VS2013 (может быть?) - PullRequest
0 голосов
/ 05 октября 2018

У меня проблемы с приложением, которое перемещает файлы из одного места в другое, используя Windows API.Проблема не в коде, а в настройках проекта, но я не знаю, что искать и где.

Я создал проект, написал загрузку кода и затем приступил к реализации.бит движения.На тестировании я продолжал получать результат «отказано в доступе».После множества царапин на голове я создал новый проект для модульного тестирования кода перемещения.Работало просто отлично.Я скопировал известный рабочий код оптом в исходный проект, удалил все остальное и перезапустил его.Доступ закрыт.Таким образом, единственное различие между этими двумя проектами заключается в том, что находится в настройках проекта.Я также проверил настройки безопасности в Explorer для обоих exe-файлов.У меня оба владельца одинаковые.

Может кто-нибудь подсказать, что мне нужно проверить / изменить в настройках?Я не хочу пытаться сравнить обе настройки проекта вручную.

Большое спасибо.

Для всех, кто интересуется, код, который я запускаю:

#include <windows.h>
#include <string>
#include <stdio.h>

void main(int argc, char** argv)
{
std::string srcPath = "S:\\_UploadTests\\Oct_10";
std::string dstPath = "S:\\_archivedtests\\Oct_10";

BYTE flags;
flags = MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING;

if (!MoveFileExA(srcPath.c_str(), dstPath.c_str(), flags)) {
    fprintf(stderr, "Error moving folder to local archive. \n\tWindows returned code: %ld\n", GetLastError());
}
getchar();
}

1 Ответ

0 голосов
/ 05 октября 2018

ОК, поэтому произошел ряд событий, но я нашел проблему.

Во-первых, и самое главное, это не имело никакого отношения к настройкам решения!Перемещение выполнялось как копирование и удаление (для этой опции есть флаг).Иногда копия удалась, но удаление не удастся, и я убью процесс, прежде чем Windows сможет привести в порядок беспорядок, который я сделал.Короче говоря, иногда я убивал процесс, а иногда позволял завершать его естественным образом, в результате чего файловая система находилась в разных состояниях, что вызывало путаницу при попытке понять, что происходит.

Так почему жеиногда возникает проблема, когда Windows пытается удалить файл?В моем первоначальном проекте я использую функцию, которая рекурсивно просматривает папки и собирает список их содержимого.Эта функция не освобождала папки по завершении, вызывая ошибку отказа в доступе, когда более поздняя функция перемещения пыталась сделать свое дело.

Почему отказ в доступе все еще возникал, когда я попытался запустить приведенный выше фрагмент кода выше?Не знаю, но сейчас это спорный вопрос.

Спасибо за поддержку, ребята.

...