Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Как определить, что файл еще пишется на диск


Автор: sergderg 9.2.2009, 07:41
Добрый день!
Есть скрипт для сканирования каталога и обработки  всех файлов, удовлетворяющих заданной маске.
С некоторой периодичностью в сканируемый каталог попадают новые файлы, при этом, если файл оказывается достаточно большого размера, пишется он на диск не сразу и появляется вероятность начать обработку неполного файла. 
Как узнать что файл еще пишется на диск? 
Спасибо

Автор: xoma 9.2.2009, 10:15
воспользуйся блокировкой файла при записи

Автор: sergderg 9.2.2009, 12:26
Цитата(xoma @ 9.2.2009,  10:15)
воспользуйся блокировкой файла при записи

Вопрос-то и возник оттого, что механизм блокировки мне не помог.
Файл в сканируемый каталог передается по FTP. 
Блокировка устанавливается, не смотря на то, что файл в этот момент еще пишется на диск:

Код

     unless (flock(FILE, 2)) {
          die "can't get write-lock!\n";
     }

Автор: Валерия 9.2.2009, 16:33
Ну кривой способ, это прочитать размер файла два раза, с промежутком времени, и если не изменился - значит уже не записывается smile

Автор: sergderg 9.2.2009, 18:06
Цитата(Валерия @ 9.2.2009,  16:33)
Ну кривой способ, это прочитать размер файла два раза, с промежутком времени, и если не изменился - значит уже не записывается smile

Да, я уже подумывал над этим, но все-таки это опять же задержка в обработке, да и надежность такого способа не внушает доверия  smile 
Должен ведь быть нормальный способ.

Автор: 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
А как положится быстро переименовывался в <имя файла> ?

Вы можете изменить прогу которая кладет этот файл?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)