C ++ std :: filesystem :: copy ошибка «Сетевое местоположение не может быть достигнуто» - PullRequest
0 голосов
/ 03 марта 2020

Я написал небольшое приложение на c ++, которое автоматически запускается после Windows загрузки на нескольких клиентах. Это приложение будет копировать файл с сетевого ресурса (тот же сетевой ресурс для всех клиентов) на локальный диск. Когда я перезагружаю все клиенты сразу, куча из них получит ошибку 1231 от функции std :: filesystem :: copy со следующим сообщением:

«Невозможно достичь сетевого расположения»

Если я перезагружу все клиенты с интервалом в пару секунд между ними, то проблем не будет. Это заставляет меня думать, что функция копирования может блокировать файл во время копирования.

Есть ли какие-то настройки, которые мне не хватает, которые предотвращают это? Это нормальное поведение?

РЕДАКТИРОВАТЬ: я смог исправить проблему с сетью, однако теперь я получаю ошибку 32, в которой говорится, что «процесс не может получить доступ к файлу, потому что он используется другим процессом». Блокирует ли функция копирования файлы, которые в данный момент копируются?

Ответы [ 3 ]

1 голос
/ 04 марта 2020

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

0 голосов
/ 05 марта 2020

я отредактировал свой вопрос; действительно, была проблема с активным каталогом, когда клиенту не сразу был дан IP-адрес, и поэтому он не мог получить доступ к общему ресурсу. После еще одного тестирования я теперь вижу, что могу выполнить команду копирования только на одном из клиентов, используя std :: filesystem :: copy, в то время как другие показывают сообщение об ошибке 32, в котором говорится, что «процесс не может получить доступ к файлу потому что он используется другим процессом ". Если я использую команду xcopy в пакетном файле вместо этого на всех устройствах одновременно, я не получаю никакой ошибки ...

0 голосов
/ 04 марта 2020

Вы столкнулись с проблемой из-за неинициализированной сети ваших клиентских рабочих станций. Ошибка ERROR_NETWORK_UNREACHABLE - 1231 (0x4CF) указывает на то, что указанный путь недостижим в экземпляре.

Вы можете использовать два подхода:

1) Продолжайте с while-l oop, пока вы не добейтесь успеха, чтобы проверить, существует ли filepath. Обработайте ошибку с помощью try-catch, если она есть. Когда вы получите успех go для загрузки / копирования.

2) Выдержите от 60 сек c до 180 сек c перед загрузкой / копированием файла в текущей программе.

...