Проверьте, завершено ли копирование файла - PullRequest
3 голосов
/ 10 февраля 2010

Я пишу веб-приложение ASP.NET, которое будет копировать содержимое компакт-диска в общий сетевой ресурс. Мне нужно периодически проверять, закончено ли задание на копирование.

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

Спасибо заранее, Стейн

EDIT
еще несколько объяснений:
Обычно я вызываю метод действия JsonResult каждые 5 секунд, который называется getStatus (источник, пункт назначения). Этот метод должен проверить следующее:
- если исходный каталог все еще пуст, копирование не может начаться -> вернуть статус «ожидание»
- если исходный каталог содержит файлы, копирование можно запустить -_> вызвать метод копирования + вернуть статус «копирование»
- если каталог назначения содержит файлы, а размер файла остается прежним, копирование завершено -> вернуть статус «закончен»

Спасибо!

Ответы [ 2 ]

2 голосов
/ 10 февраля 2010

В вашем веб-приложении используйте операцию копирования файла , блокирующую , например File.Copy , но запустите процедуру, выполняющую копирование в фоновом потоке. В фоновом потоке запишите информацию о состоянии (например, «3 из 9 файлов завершены» или «Я закончил!» Или «Произошла ошибка: ...») в некоторый общий объект (статическая переменная, Session объект, база данных, ...). Затем напишите некоторую страницу Status.aspx, которая показывает содержимое этого общего объекта.

0 голосов
/ 10 февраля 2010

Создание веб-сервисов, доступных на стороне javascript клиента, двумя способами: StartCopying, CheckStatus.

  • Реализация StartCopying может либо запускать поток backgorund для копирования, либо иметь [SoapDocumentMethod (OneWay = true)], что означает, что метод немедленно возвращается без ожидающего выполнения.
  • CheckStatus просто проверяет то, что вы описали выше, и возвращает клиенту статус задачи.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...