Forum Webscript.Ru

Программирование => Perl => Тема начата: Wells от 28 Апреля 2005, 09:51:47

Название: Файловый монитор
Отправлено: Wells от 28 Апреля 2005, 09:51:47
Привет всем! Не являясь большим спецециалистом по PERL\'у, иногда предпочитаю писать на нём. Особенно учитывая все его прелести. Поэтому, если вопросы будут дурацкие - уж извиняйте.
Есть проблема: на Win серваке нужно мониторить каталог на предмет изменения и добавления файлов. Файлы в формате CSV. Каждый день добавляется новый файл и в него весь день пишется инфа. Все изменения нужно сбрасывать в SQL. Сейчас работает следующий вариант: на SQL серваке крутиться DTS пакет который раз в день забирает с расшаренной директории новый файл(за прошедший день) и закачивает его в базу. Нужно, что бы изменения отражались в базе не раз в день, а сразу. Ну и как-то покрасивее хочется сделать.
Решил написать скрипт, который на серваке с файлами крутился бы в фоне и мониторил каталог.
Всё что нарыл - Win32::ChangeNotify

use strict;
require Win32::ChangeNotify;
my $Path=\'D:\\DATA\';
my $WatchSubTree=1;
my $Events=\'LAST_WRITE\';
my $notify=Win32::ChangeNotify->new($Path,$WatchSubTree,$Events);
$notify->wait();
print "Something changed\\n";

И то как-то криво работает. Как в цикл загнать - непонятно. Как получить,что конкретно изменилось - тоже не знаю.
Название: Файловый монитор
Отправлено: Wells от 28 Апреля 2005, 11:46:34
С циклом разобрался (PrimalScript перехватывал вывод):

use strict;
require Win32::ChangeNotify;
my $Path=\'D:\\DATA\';
my $WatchSubTree=1;
my $Events=\'LAST_WRITE\';
my $objNotify=Win32::ChangeNotify->new($Path,$WatchSubTree,$Events);
while (1) {
    $objNotify->wait();
    print "Something changed\\n";
    $objNotify->reset();
}
$objNotify->close();

А как узанть, что конкретно изменилось в каталоге? Какой файл и что в него дописалось?
print $objNotify выдаёт Win32::ChangeNotify=SCALAR(0xbe7c94)
И что с этим делать??????
Название: Файловый монитор
Отправлено: cr4ck3r от 29 Апреля 2005, 10:45:22
В отладчике посмотрите дамп объекта $objNotify - возможно это решит еще один вопрос. (вывести дамп можно так:
DB> x $objNotify

)
Название: Файловый монитор
Отправлено: Wells от 29 Апреля 2005, 11:57:04
Отладчик всё время пишет:
0  Win32::ChangeNotify=SCALAR(0x15d5224)
   -> 88
Ничего не меняется с момента инициализации $objNotify и до выхода.
Если ещё раз запустить изменяется то что в скобках и после стрелки????????
Название: Файловый монитор
Отправлено: cr4ck3r от 02 Мая 2005, 19:57:09
Так тебе нужен дамп. А не просто print.
Ты пробовал через \'x\' выводить дамп и что он пишет? Вообще гуевые отладчики очень удобны в некоторых случаях, типа komodo или из набора PDK.
Название: Файловый монитор
Отправлено: Wells от 06 Мая 2005, 10:59:49
Ну поставил я себе Komodo.
И как там посмотреть???
Если запустить дебагинг, то после шага my $objNotify=...
$objNotify становится равен Win32::ChangeNotify=SCALAR(0x15d5224).
И все