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


Автор: Uran34 10.12.2010, 19:30
Такой вопрос. Есть некий файл, открывающийся при начале работы программы. Допустим он имеет определненный размер. Этот размер имеет влияние на работу программы при следующем ее, повторном запуске. Т. е. если изменится размер файла - исказятся данные, формирующиеся последующими вычислениями программы на сервере при запуске другим пользователем. Мысль такая: зафиксировать размер файла при первом сеансе работы, используя -s $name_file, а потом, при втором запуске сравнить измеренное значение с изменившимся. Если значения не равны, принимаются соответсвующие корректирующие меры. Вот как это сделать, голову сломал, не знаю. Есть ли функция, подобная операциям -s, -z, чтобы узнать, произошло ли изменение размера? 

Автор: arto 10.12.2010, 21:36
# touch aa 
# perl -le 'print -s "aa"'
0
# cat >|aa
aa
^D
# perl -le 'print -s "aa"'
3

не оно?

Автор: Uran34 11.12.2010, 21:12
Признаться, ничего не понял. А можно как-нибудь поподробнее, с разъяснениями? (Я же только учусь smile )

Автор: arto 11.12.2010, 22:43
тестовая функция -s file возвращает раз мер файла в байтах (perldoc -f -s)
размер файла возвращает так же функция stat (perldoc -f stat)

Автор: Uran34 12.12.2010, 09:21
Цитата(arto @  11.12.2010,  22:43 Найти цитируемый пост)
тестовая функция -s file возвращает раз мер файла в байтах (perldoc -f -s)
размер файла возвращает так же функция stat (perldoc -f stat) 


Да, это мне известно. Но вот в чем проблема-то. Я могу измерить размер файла, что называется,здесь и сечас, в данный момент времени
согласно действию кода программы. Это значение будет мне известно. А с чем его сравнить? Как запомнить размер файла, который был
до этого контрольного измерения? При выходе из программы значение переменной теряется, увы. Вот я и хочу узнать, есть ли такая функция, чтобы измерить текущий размер файла и сравнить его с предыдущим, где-то зафиксированным программой? Ну, вот, например, есть файл базы данных, в который заносится какая-то информация (размер в байтах, соответсвенно меняется). Программа должна между запусками помнить последнее измеренное значение. Кто-то, после очередного изменения, вызывает программу и она должна, прежде чем выдать необходимый результат, произвести измерения файла в данный момент и сравнить с размером предыдущим. Если есть разница, тогда выполняется корректировка данных.   

Автор: gcc 12.12.2010, 11:29
еще есть:
Event::Notify 
http://search.cpan.org/~dmaki/Event-Notify-0.00004/lib/Event/Notify.pm
File::ChangeNotify
http://search.cpan.org/~drolsky/File-ChangeNotify-0.19/lib/File/ChangeNotify.pm
с библиотеки EV как-то можно, наверное

MVC Catalyst когда работает и когда изменились файлы, то веб-сервер(HTTP::DEAMON) может перегрузить себя, чтобы внеслись изменения в работающее приложение

Автор: shamber 12.12.2010, 20:11
Цитата(Uran34 @  12.12.2010,  09:21 Найти цитируемый пост)
Кто-то, после очередного изменения, вызывает программу и она должна, прежде чем выдать необходимый результат, произвести измерения файла в данный момент и сравнить с размером предыдущим.

какие проблемы, пишите результат измерения куда хотите(файл, база еще какие варианты), при запуске читайте их в хеш и сравнивайте.

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