Я пишу приложение, которое отслеживает каталог на наличие новых входных файлов, опрашивая каталог каждые несколько секунд. Новые файлы часто могут занимать несколько мегабайт, поэтому для полного поступления во входной каталог требуется некоторое время (например, при копировании с удаленного общего ресурса).
Есть ли простой способ определить, находится ли файл в данный момент в процессе копирования? В идеале любой метод должен быть независимым от платформы и файловой системы, но в противном случае для разных платформ могут потребоваться конкретные стратегии.
Я уже подумал о том, чтобы взять два списка каталогов, разделенных на несколько секунд, и сравнить размеры файлов, но это вводит компромисс между временем и надежностью, которым мои начальники недовольны, если нет альтернативы.
Для фона приложение пишется в виде набора M-файлов Matlab, поэтому, боюсь, нет трюков с JRE / CLR ...
Редактировать: файлы поступают на вход непосредственно с помощью операции прямого перемещения / копирования, либо с сетевого диска, либо из другого места в локальной файловой системе. Эта операция копирования, вероятно, будет инициирована пользователем, а не другим приложением.
В результате довольно сложно возложить на поставщика файлов ответственность за добавление файлов управления или использование промежуточной промежуточной области ...
Вывод: похоже, что простого способа сделать это не существует, поэтому я остановился на подходе «пояс и скобки» - файл готов к обработке, если:
- его размер не изменяется в течение определенного периода времени, и
- можно открыть файл в режиме только для чтения (некоторые процессы копирования блокируют файл).
Спасибо всем за ответы!