Плагин 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 <
![]()