Оповещение о создании новой папки

Обсуждение программ nnCron и nnCron LITE

Оповещение о создании новой папки

Postby zloVdar » Wed, 07 Dec 2016, 12:20

Доброго времени!
Помогите пожалуйста реализовать сабж. Нужно, чтоб при появлении новой папки в директории выводилось некое оповещение.
Мои тщетные старания ничем толковым не закончились, но вот что я наделал:
Code: Select all
#( Folder

2VARIABLE Count1
1. Count1 2!
2VARIABLE Count1

WatchDir: "\\servernew\GRAFIC\_Work"
WATCH-CHANGE-LAST-WRITE
SingleInstance

Action:

FOR-FILES: "\\servernew\GRAFIC\_Work"
   IS-DIR?
      IF Count1 2@ 1 +
   THEN
;FOR-FILES

Count1 Count2 >
IF 
   Count1 Count2 !
   MSG: "Folder exist"
THEN

)#


Суть идеи: в случае изменения пересчитывать количество папок не учитывая подпапки и сравнивать с прежним значением.
Или может можно как-то заставить WatchDir не смотреть в подпапки? В таком виде она выдает сообщения при любом изменении в любой папке.
zloVdar
 
Posts: 3
Joined: Wed, 07 Dec 2016, 12:10

Re: Оповещение о создании новой папки

Postby elos » Mon, 12 Dec 2016, 12:01

Если бы папка была строго определённого имени, то можно было бы использовать:
Если в качестве аргумента к слову WatchDir: указан отсутствующий каталог, то WatchDir: погружается в цикл ожидания его появления и периодически проверяет - не появился ли указанный каталог. Обнаружив появление каталога, слово WatchDir: срабатывает. Период между проверками в миллисекундах задаётся VALUE-переменной MonitorDirTimeout. Значение этой переменной по умолчанию - 60000 миллисекунд (60 секунд).

А папку потом переименовывать... И счётчик не нужен...

Такое можно использовать в вашем случае?
elos
 
Posts: 667
Joined: Tue, 25 Apr 2006, 11:15

Re: Оповещение о создании новой папки

Postby elos » Tue, 13 Dec 2016, 20:04

Ещё идея (сам проверял в командной строке с ключом -list отработку на пустую папку только, как на просто файл будет реагировать - тут сами пробуйте) - при сработке искать нечто, созданное в пределах одной минуты с помощью nnbackup - циклы встроены, списки создавать может, куча ключей сортировки, коды возврата есть...
Code: Select all
#( test_watchdir
WatchDir: "?\\servernew\GRAFIC\_Work"
WATCH-CHANGE-LAST-WRITE
Action:
START-APPW: "nnbackup.exe copy -i ?\\servernew\GRAFIC\_Work -o (drive:\backup_dir) -s -e -q -RD 00/00:01 -nocopy"
\ на пустые папки nnbackup не реагирует, только на файлы, поэтому...
\ анализируем код возврата: 1  - В процессе работы не был обработан ни один файл (нет ни одного файла, удовлетворяющего заданным условиям) (ERR-NO-FILES).
\ но WatchDir: отработал - значит была пустая папка создана
ExitCodeProc 1 =
IF
   BEEP: 500 500
   TMSG: "Folder created!" 5
THEN
)#

Может nnbackup всё таки может не только на файлы, но и на папки реагировать/отбирать? Или я таки этого не увидел?
Возможно придётся создавать списки и анализировать - просто файл или путь ещё добавился...

И вопрос от народа - "Какая конечная цель отлова появления папки?". Ну появилась. А дальше то что? От этого может реализация зависеть...
elos
 
Posts: 667
Joined: Tue, 25 Apr 2006, 11:15

Re: Оповещение о создании новой папки

Postby zloVdar » Wed, 14 Dec 2016, 07:09

elos wrote:Если бы папка была строго определённого имени, то можно было бы использовать:
Если в качестве аргумента к слову WatchDir: указан отсутствующий каталог, то WatchDir: погружается в цикл ожидания его появления и периодически проверяет - не появился ли указанный каталог. Обнаружив появление каталога, слово WatchDir: срабатывает. Период между проверками в миллисекундах задаётся VALUE-переменной MonitorDirTimeout. Значение этой переменной по умолчанию - 60000 миллисекунд (60 секунд).

А папку потом переименовывать... И счётчик не нужен...

Такое можно использовать в вашем случае?


Имена папок - это пятизначное число и сразу таковой создается. Папок в корне 5000+. Думаю это немаловажно.
Цель и суть: менеджер, при появлении заказа, создает папку и складывает в нее рабочие файлы. Это может происходить часто, а может пару раз за день. Так вот чтоб не смотреть бесконечно в папку в ожидании заказа и придумана такая идея. :) Просто оповещение о появлении нового заказа.
Спасибо за ответ! Может есть способ реализовать это проще?
Честно говоря, думал в этом форуме нет никого ))
zloVdar
 
Posts: 3
Joined: Wed, 07 Dec 2016, 12:10

Re: Оповещение о создании новой папки

Postby elos » Wed, 14 Dec 2016, 10:31

Ну, если папка с файлами создаётся... Тогда тупо раз в минуту ищем в ней файлы, созданные за прошедшую минуту.
Копируем себе во временную папку и открываем эту папку, не забыв напомнить себе об этом звуком и самоисчезающим окном.
( Копия никогда не вредит. Лучше заменить файлы, чем безвозвратно их испортить. Только убрать -nocopy и раскомментировать запуск проводника. За правильность употребление текстовой переменной в виде пути не совсем уверен - давно не упражнялся - попробуй.)
Применение nnbackup обусловлено нежеланием изобретать велосипед в виде написания цикла прохода по папке и условных операторов внутри него по отбору папок/файлов.

Code: Select all
#( test_watchdir
\ задача отрабатывается по умолчанию раз в минуту...
CREATE sNewJob 256 ALLOT \ текстовая переменная будущего пути копии
Action:
S" %FOLDER-TEMP%\job_%YYYY%%MM%%DD%_%hh%%mm%" sNewJob PLACE \ создаём путь сохранения копии в виде дата_время

START-APPW: "nnbackup.exe copy -i ?\\servernew\GRAFIC\_Work -o sNewJob -s -e -q -RDC 00/00:01 -nocopy"
ExitCodeProc 0 = \ найденные файлы отработаны
IF
    BEEP: 500 500
    \ START-APP: "explorer sNewJob"
    TMSG: "New task!" 3
THEN
)#

Наличие в корне некоей папки 5000+ папок, на мой взгляд, не есть хорошо. Просто открытие такой папки будет достаточно медленное само по себе даже на локальной машине. (и была у меня VFP-программка, которая накопила в своей папке логов на 13000+ и вывалилась с нежеланием запускаться - ищи причину потом...)
Отработанные задания лучше переносить в другую папку. Искать будет легче (если глазами, а не поиском). Ты же знаешь, что ищешь - отработанное или нет, туда и идёшь.

И, насколько я встречал, даже при наличии сетевого доступа к папке и оповещении в разного рода "документооборотах" (CRM-систем) - я сторонник ещё и позвонить. Люди разные бывают в офисе, техника ломается, договор может принести значительную прибыль или проблемы... Надеяться можно только на себя.

P.S. Мучит меня подозрение, что могу наплодить папок во временной папке, но это уж сам разберёшься.

zloVdar wrote:Может есть способ реализовать это проще?
По-моему, просто и коротко. Нельзя запутаться и взгляд не теряется в коде.
elos
 
Posts: 667
Joined: Tue, 25 Apr 2006, 11:15

Re: Оповещение о создании новой папки

Postby dothen » Thu, 15 Dec 2016, 13:35

Еще такой вариант.
В этой задаче создаются два списка и делается их сравнение целиком,
поэтому сообщение о том что поступил заказ, будет выводится и при создании и при удалении папки.

Code: Select all
#( task_DirList
\ NoActive
Time: */5 * * * * * \ Каждые 5 минут.
Action:
    SWHide
    FILE-EXIST: "e:\DirListCur.txt"
    IFNOT
      S" dir e:\games /b /ad /o-d > e:\DirListCur.txt" START-APP \ Делаем список папок.
    THEN
    500 PAUSE
    S" dir e:\games /b /ad /o-d > e:\DirListNew.txt" START-APP \ Делаем второй список папок.
    500 PAUSE
    S" e:\DirListCur.txt" FILE \ Читаем файл в память.
    S" e:\DirListNew.txt" FILE
    COMPARE
    IF \ Если есть разница.
      FILE-DELETE: "e:\DirListOld.txt"
      500 PAUSE
      FILE-RENAME: "e:\DirListCur.txt" "e:\DirListOld.txt" \ Файлы DirListCur.txt и DirListOld.txt при необходимости можно будет открыть и сравнить визуально их содержимое.
      500 PAUSE
      FILE-RENAME: "e:\DirListNew.txt" "e:\DirListCur.txt"
      S" Поступил заказ!" MsgBox
    ELSE
      FILE-DELETE: "e:\DirListNew.txt"
    THEN
)#
dothen
 
Posts: 184
Joined: Mon, 16 Mar 2015, 04:58

Re: Оповещение о создании новой папки

Postby zloVdar » Thu, 15 Dec 2016, 17:57

Спасибо за отзывчивость и помощь!
zloVdar
 
Posts: 3
Joined: Wed, 07 Dec 2016, 12:10


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Bing [Bot] and 7 guests

cron