2010-11-16 4 views
4

У меня есть служба .NET с помощью FtpWebRequest для загрузки изображения с FTP-сервера. У меня есть камера, которая хранит изображения на одном FTP-сервере..NET FtpWebRequest: Как проверить, если файл готов к загрузке

Если моя служба увидит изображение и пытается загрузить его до того, как камера закончит хранить одно и то же изображение, «еще не сохраненная часть» изображения появится серым (поврежден).

Вопрос: Как определить, готово ли изображение для загрузки (сохранено полностью)?

+0

Грязным обходным путем было бы загружать только изображения, которые старше х минут. – Bobby

ответ

1

Если у вас есть контроль над службой отправки, вы можете реализовать это с использованием файлов-маркеров. Если передающая услуга будет, например, напишите файл «.finished», когда это будет сделано, вы можете дождаться появления этого файла.

Однако я подозреваю, что у вас нет контроля над программным обеспечением в камере. Есть несколько проблем с обнаружением того, завершила ли камера загрузку, особенно при медленном подключении к Интернету.

Я думаю, что лучшим решением было бы проверить изменения в размере файла. Просмотрите папку и посмотрите, появятся ли новые файлы. Затем, если размер файла не изменился, например. в минуту, вам должно быть достаточно безопасно скачать файл.

+0

@ ** Pieter **: Вы правы, у меня нет контроля над программным обеспечением камеры. Я продолжу идею монитора размера файла - спасибо за ваш ответ =) – Chau

+0

Добро пожаловать. –

0

Загрузите еще один небольшой файл после большого файла. Используйте небольшой файл для проверки «полноты» (или, возможно, MD5 внутри него тоже будет работать).

1

Сделать программное обеспечение камеры хранить изображения в другом каталоге (назовем его Dir1). Попробуйте переместить файлы из этого каталога в другой каталог (назовем его Dir2).

Если файл по-прежнему открыт программным обеспечением камеры, движение должно завершиться неудачно, поэтому только завершенные изображения будут перемещены из Dir1 в Dir2.

Загрузить изображения из Dir2.