| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Системное программирование > Как определить, что файл еще пишется на диск |
| Автор: sergderg 9.2.2009, 07:41 |
| Добрый день! Есть скрипт для сканирования каталога и обработки всех файлов, удовлетворяющих заданной маске. С некоторой периодичностью в сканируемый каталог попадают новые файлы, при этом, если файл оказывается достаточно большого размера, пишется он на диск не сразу и появляется вероятность начать обработку неполного файла. Как узнать что файл еще пишется на диск? Спасибо |
| Автор: xoma 9.2.2009, 10:15 |
| воспользуйся блокировкой файла при записи |
| Автор: sergderg 9.2.2009, 12:26 | ||||
Вопрос-то и возник оттого, что механизм блокировки мне не помог. Файл в сканируемый каталог передается по FTP. Блокировка устанавливается, не смотря на то, что файл в этот момент еще пишется на диск:
|
| Автор: Валерия 9.2.2009, 16:33 |
| Ну кривой способ, это прочитать размер файла два раза, с промежутком времени, и если не изменился - значит уже не записывается |
| Автор: sergderg 9.2.2009, 18:06 | ||
Да, я уже подумывал над этим, но все-таки это опять же задержка в обработке, да и надежность такого способа не внушает доверия Должен ведь быть нормальный способ. |
| Автор: FooBar 9.2.2009, 22:46 |
| если линукс то: http://search.cpan.org/search?query=inotify&mode=all |
| Автор: aksined 10.2.2009, 13:38 |
| если Вы сами писали скрипт, который обрабатывает файлы, и можете его изменить, может быть изменить логику работы так, чтобы скрипт, который забирает файлы по ФТП сам запускал обработчик после окончания закачки? Кроме того, можно привязываться не к файлу, а наличию процесса в памяти. Есть утилиты и для win в том числе |
| Автор: ramus 13.2.2009, 21:33 |
| А нельзя чтобы по FTP файл клался с именем <имя файла>.in_progress А как положится быстро переименовывался в <имя файла> ? Вы можете изменить прогу которая кладет этот файл? |