Плагин time.spf
Файл: time.spf
Автор: Nicholas Nemtsev
Описание: Плагин позволяет отслеживать время создания (последнего
доступа, последней записи) файла с точностью до секунды. Кроме этого, предоставляется
возможность отслеживать изменения файлов по маске и составлять список измененных
файлов.
Новые слова:
FILE-TIME: "filename"
FILE-ATIME: "filename"
FILE-WTIME: "filename"
Определяет время создания/время последнего доступа/время последней записи в указанный файл. Возвращает дату в формате FILETIME.
Примеры:
#( test_file_time1 \ если файл '1.sem' создан раньше, чем файл '2.sem', \ производим какие-то полезные действия Action: FILE-TIME: "C:\1.sem" FILE-TIME: "C:\2.sem" FTIME- 0> IF \ ... производим работу THEN )#
Существует постфиксные варианты этих слов:
S" c:\temp\test.txt" FILE-TIME S" c:\temp\test.txt" FILE-ATIME S" c:\temp\test.txt" FILE-WTIME
Дополнительные способы работы с датами и приемы преобразования дат подробно описаны в соответствующей главе.
Используется для сравнения времени создания (последнего доступа, последней
записи) двух файлов, а также для сравнения времени создания (последнего доступа
и последней записи) с текущим временем.
Возвращает разницу (в секундах) между двумя датами в формате FILE-TIME.
Примеры:
\ файл test.txt был создан более 10 минут назад FT-CUR FILE-TIME: "test.txt" FTIME- 600 >
Дополнительные способы работы с датами и приемы преобразования дат подробно описаны в соответствующей главе.
При первом использовании FILE-CHANGE: составляет (по маске) список
файлов, учитывая время последнего изменения, а затем, при последующих использованиях,
сравнивает список с самими файлами и возвращает TRUE если один или
несколько файлов изменились. Если с файлами ничего не произошло, то FILE-CHANGE:
возвращает FALSE.
Список отслеживаемых файлов сохраняется в домашнем каталоге nnCron под именем
etc\filechange.txt. Удаленные файлы не учитываются, т. е. не считаются
измененными.
Перед словом FILE-CHANGE: можно использовать модификатор RECURSIVE.
Не забывайте, что слово FILE-CHANGE: возвращает флаг. Это означает, что FILE-CHANGE: нужно иcпользовать совместно с конструкцией IF ELSE THEN или явным образом удалять со стека возвращенное FILE-CHANGE: значение.
Примеры:
#( test_file_time3 \ раз в 10 минут отслеживаем изменения всех текстовых файлов в \ каталоге 'c:\xxx'. Выводим сообщение при обнаружении изменений Time: */10 Action: FILE-CHANGE: "c:\XXX\*.txt" IF TMSG: "Files were changed!" 5 THEN )# #( test_file_time_3_recursive \ раз в 10 минут отслеживаем изменения всех текстовых файлов в \ каталоге 'c:\xxx' и его подкаталогах. \ Выводим сообщение при обнаружении изменений Time: */10 Action: RECURSIVE FILE-CHANGE: "c:\XXX\*.txt" IF TMSG: "Files were changed!" 5 THEN )#
Cписок измененных файлов, который формируется после работы FILE-CHANGE:.
Примеры:
#( test_file_time4 \ раз в 10 минут отслеживаем изменения всех текстовых файлов в \ каталоге 'c:\xxx'. Выводим сообщение при обнаружении изменений. \ Список измененных файлов выводим на консоль : type-node NodeValue ASCIIZ> TYPE CR ; Time: */10 Action: FILE-CHANGE: "c:\XXX\*.txt" IF TMSG: "Files were changed" 5 ['] type-node FCH-CH-LIST DoList THEN )# #( test_file_time5 \ раз в 10 минут отслеживаем изменения всех текстовых файлов в \ каталоге 'c:\xxx'. Список измененных файлов сохранияем в файл \ 'log\list.log' и выводим список в сообщении : log-list NodeValue ASCIIZ> S" log\list.log" LOG ; Time: */10 Action: FILE-CHANGE: "c:\XXX\*.txt" IF ['] log-list FCH-CH-LIST DoList TMSG: "Changed files:%crlf%%FILE: log\list.log%" 10 FILE-DELETE: "log\list.log" THEN )# #( test_file_time6 \ раз в 10 минут отслеживаем изменения всех текстовых файлов в \ каталоге 'c:\xxx'. Имя каждого измененного файла передаем в \ качестве параметра программе 'notepad.exe' : write-files NodeValue ASCIIZ> S" c:\changed_files.log" FAPPEND crlf S" c:\changed_files.log" FAPPEND ; VARIABLE list-file CREATE list-contents 258 ALLOT Time: */10 Action: FILE-CHANGE: "c:\XXX\*.txt" IF \ writing the list of all the changed files ['] write-files FCH-CH-LIST DoList \ reading the list one line at a time S" c:\changed_files.log" R/O OPEN-FILE-SHARED THROW list-file ! BEGIN list-contents 1+ 255 list-file @ READ-LINE THROW WHILE list-contents C! \ processing each line: passing each filename as \ command line parameter START-APP: notepad.exe %list-contents COUNT% REPEAT DROP list-file @ CLOSE-FILE DROP FILE-DELETE: "c:\changed_files.log" THEN )#
Кладет на стек количество секунд, прошедших с момента старта операционной системы.
Пример:
\ задача запустится, если с момента старта \ операционной системы прошло меньше 90 секунд Rule: UPTIME 90 <