PDA

Показать полную графическую версию : [решено] Детект потерянного соединения в ftp.exe


Voidstranger
04-12-2017, 22:27
Доброго времени суток. С горем пополам настроил синхронизацию локальной папки с фтп через ftp.exe (увы, но использование именно ftp.exe обязательно). Но иногда при закачке файлов с фтп ftp.exe просто "подвисает" - начинает качать, а потом перестаёт, просто висит. В папке висит недозакачанный файл. Можно ли как-то задетектить такое поведение и, например, закрыть ftp.exe?

greg zakharov
05-12-2017, 10:06
настроил синхронизацию локальной папки с фтп через ftp.exe
Да ну?!
В папке висит недозакачанный файл. Можно ли как-то задетектить такое поведение и, например, закрыть ftp.exe?Средствами командной строки сделать сие затруднительно, плюс ко всему прочему нужно заведомо знать размер загружаемого файла, чего не умеет ни одна штатная утилита комстроки Windows. Если обратиться к PowerShell, задача бы сводилась к:
1) запросу на ftp на существование файла с возвратом размера последнего в случае его существования
2) созданием экземпляра объекта наблюдателя файловой системы с лимитом на простой загрузки файла
3) разрывом соединения в случае, если наблюдатель не отрапортовал об окончании загрузки по окончании последней операции или истечением отведенного времени на загрузку
Другой вариант, при условии, что система Win10 Pro, можно установить подсистему Linux и установить из магазина приложений, скажем, Ubuntu, благо та всего в сотню с небольшим лишком мегабайт, и использовать Bash.
Ну и третий вариант, собрать из исходников curl и все запросы к ftp гнать через него, ибо ftp.exe в Windows это двольно гнусная вещь, которую следует блокировать на уровне групповых политик Windows.

Voidstranger
06-12-2017, 09:14
Вы, наверное, удивитесь, но батник пару дней работает как часы. Ненужные файлы с фтп удаляются, недостающие закачиваются. Потом файлы нормально назад качаются для проверки. И всё со стандартным ftp.exe. В случае обрывов связи - нормально детектится ошибка.
Так что пока вопрос снимается:)




© OSzone.net 2001-2012