Forum Webscript.Ru
Программирование => Perl => Тема начата: 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";
И то как-то криво работает. Как в цикл загнать - непонятно. Как получить,что конкретно изменилось - тоже не знаю.
-
С циклом разобрался (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)
И что с этим делать??????
-
В отладчике посмотрите дамп объекта $objNotify - возможно это решит еще один вопрос. (вывести дамп можно так:
DB> x $objNotify
)
-
Отладчик всё время пишет:
0 Win32::ChangeNotify=SCALAR(0x15d5224)
-> 88
Ничего не меняется с момента инициализации $objNotify и до выхода.
Если ещё раз запустить изменяется то что в скобках и после стрелки????????
-
Так тебе нужен дамп. А не просто print.
Ты пробовал через \'x\' выводить дамп и что он пишет? Вообще гуевые отладчики очень удобны в некоторых случаях, типа komodo или из набора PDK.
-
Ну поставил я себе Komodo.
И как там посмотреть???
Если запустить дебагинг, то после шага my $objNotify=...
$objNotify становится равен Win32::ChangeNotify=SCALAR(0x15d5224).
И все