Я пишу приложение, которое отслеживает каталог для новых входных файлов, опросив каталог каждые несколько секунд. Новые файлы могут часто составлять несколько мегабайт, поэтому потребуется некоторое время, чтобы полностью войти в каталог ввода (например: при копировании с удаленного ресурса).Определить файл в пути?
Есть ли простой способ определить, находится ли файл в настоящее время в процессе копирования? В идеале любой метод был бы агностиком для платформы и файловой системы, но не для того, чтобы определенные стратегии могли потребоваться для разных платформ.
Я уже рассмотрел возможность перебора двух каталогов separaetd на несколько секунд и сравнения размеров файлов, но это вводит компромисс между временем и надежностью, что мои начальники недовольны, если нет альтернативы.
Для фона, приложение записывается в виде набора Matlab M-файлы, так что нет JRE/CLR трюки я боюсь ...
Edit: файлы не прибывают в ввод непосредственно посредством операции прямого перемещения/копирования, либо с сетевого диска, либо из другого места в локальной файловой системе. Эта операция копирования, вероятно, будет инициирована пользователем, а не другим приложением.
В результате, это довольно трудно разместить какую-либо ответственность на поставщик файла для добавления управляющих файлами или использовать промежуточный плацдарм ...
Заключение: кажется, что не существует простой способ чтобы сделать это, поэтому я остановился на подход ремня и противовесов брекетов - файл готов для обработки, если:
- его размер не изменяется в течение определенного периода времени, и
- можно открыть файл в режиме только для чтения (некоторые процессы копирования помещают блокировку в файл).
Спасибо всем за их ответы!
Почти через год после моего первоначального поста я все больше приближаюсь к написанию бумаги под названием «FTP считается вредным». Я вижу, что анти-шаблон «сообщение большими файлами по FTP» во многих так называемых «корпоративных» магазинах положительно тревожит меня. Я уверен, что он возвращается к эпохе, когда связь между приложениями осуществлялась путем переноса ленты между машинами, и что никто еще не оспаривал крики «Мы всегда так делали». – 2010-09-29 12:56:07