Форум » GUI » Мониторинг папки » Ответить

Мониторинг папки

ALanIN: Уважаемые, как лучше всего сделать в HMG слежение за изменениями в каталоге. А именно - как только в данном каталоге появился новый файл - запустить определенную функцию, например вывод содержимого этого файла в ListBox.

Ответов - 11

Haz: ALanIN пишет: сделать в HMG слежение за изменениями в каталоге. Вешаешь на таймер функцию CheckFolder() набросал примерно по ходу, возвращает имя нового файла или пустую строку, не проверяем удаление файла Func CheckFolder() local aDir := Directory( GetStartupFolder() + "\*.*" ) local cFile := '' LOCAL cNew := '' LOCAL i := 0 static aFolder := {} if Empty(aFolder ) aFolder := aDir // на первый раз end for i := 1 To Len(aDir) if aScan( aFolder, { |y| y[1] == aDir[1] } ) == 0 cFile := aDir[1] exit end end aFolder := aDir Return cFile

ALanIN: Date:03/06/11 Time: 11:49:41 Error BASE/1070 Argument error: == Called from __EVAL(42) Called from ASCAN(0) Called from CHECKFOLDER(42) Called from (b)MAIN(26) Called from _DOCONTROLEVENTPROCEDURE(4171) Called from EVENTS(1071) Called from _DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(3862) Called from MAIN(10) aScan( aFolder, { |y| y[1] == aDir[1] } ) == 0 - здесь косяк

Haz: Ты же идею просил, идею скинул. Не проверял на работоспособность , но должно идти .Далее, допиливай ее под свои нужды Кстати ошибку мог бы и сам исправить aScan( aFolder, { |y| y[1] == aDir[1] } ) == 0


Haz: индекс массива добавь aScan( aFolder, { |y| y[1] == aDir[1] } )

ALanIN: Directory кстати - многомерный массив , ну в смысле что aDir[1] - это не название файла

Haz: Классный глюк , если запостить aScan( aFolder, { |y| y[1] == aDir[1] } ), между aDir и [1] стоит буковка i в квадратных скобках - то этот индекс пропадает. А я подумал сам пропустил

ALanIN: Эхх :( если каталог был пуст изначально, и в нем появился 1 файл то этот файлик никак не отлавливается :(. Если затем пришел ещё 1 файл то он уже видится как новый. И ещё если за интервал сканирования пришло 10 файлов - то отлавливается как новый только один

Haz: ALanIN Скинь почту , я тебе лучше мылом пример отправлю. чтоб конфу не раздувать этими изысками

Sergey Spirin: Вообще, такой скан по таймеру, это очень уж грубовато. Если речь про Win, то для мониторинга файловой системы здесь используются три WinAPI-функции: FindFirstChangeNotification, FindCloseChangeNotification, FindNextChangeNotification. Поищите, возможно кто-нибудь и делал HB_FUNC-обертки этих функций для [x]Harbour-а.

gustow: Haz пишет: Классный глюк , Уж сколько раз твердили миру... :) что, мол, ребятыыыы, при запостивании исходников проверяйте выложенное предпросмотром на эти "классные глюки" (оно ж _глазом_ видно, где вместо "[ i" стоит "[i" - с того места курсив полез) - а то иногда (особенно в относительно больших текстах) намаешься выправлять "убитое парсером"... а что уж говорить про каких-нибудь "начинающих"? он скопипастил, закомпилил, не работает :(((((

PSP: Sergey Spirin пишет: Поищите, возможно кто-нибудь и делал HB_FUNC-обертки этих функций для [x]Harbour-а. Поиск не дал результатов :) А вообще-то, функции нужные.



полная версия страницы