Как можно сделать, чтобы если например в папке появляется новый файл, программа выдает сообщение с определенным текстом и с сылкой на файл.
Сообщение о добавлении файла
Страница: 1
Сообщений 1 страница 3 из 3
Поделиться225.05.2011 12:17:08
Может не самый оптимальный вариант кода (мастера предложат лучше):
При первом старте сканируем нужную директорию, далее по таймеру или при клике на кнопку снова сканируем и смотрим все совпадения...
Запусти, а потом создай на диске С новый файл и нажми кнопку....
Код:
Enumeration #Window_0 #But EndEnumeration Global put.s="C:\" Structure Spisok Name.s EndStructure Global NewList MySpisok.Spisok() ; Динамически связанный список Procedure Direct(ifr) If ExamineDirectory(0, GetPathPart(put.s), "*.*") Repeat FileType = NextDirectoryEntry(0) If FileType FileName.s = DirectoryEntryName(0) If FileName.s <> "." And FileName.s <> ".." If ifr=0 AddElement(MySpisok()) MySpisok()\Name=FileName ElseIf ifr=1 ForEach MySpisok() If FileName=MySpisok()\Name ff=1 EndIf Next If ff=0 MessageRequester("Новый файл",put.s+FileName) EndIf ff=0 EndIf EndIf EndIf Until FileType = 0 EndIf EndProcedure OpenWindow(#Window_0,0,0,380,200,"Окно",#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible) ButtonGadget(#But,10,10,70,20,"Пуск") Direct(0) HideWindow(#Window_0, 0) Repeat Event = WaitWindowEvent() Window = EventWindow() Gadget = EventGadget() Select Event Case #PB_Event_Gadget Select EventGadget() Case #But Direct(1) ;SetTimer_(WindowID(#Window_0),Event,10000,@Direct()) ;опрос по таймеру EndSelect EndSelect If Event = #PB_Event_CloseWindow Break EndIf
Отредактировано mirashic (25.05.2011 12:24:20)
Поделиться325.05.2011 14:50:35
Есть специальная API функция в Винде для этого - ReadDirectoryChangesW
Пример использования:
Код:
; ; Monitor Directory Changes ; ; Notify filter values #FILE_NOTIFY_CHANGE_FILE_NAME = 1 #FILE_NOTIFY_CHANGE_DIR_NAME = 2 #FILE_NOTIFY_CHANGE_ATTRIBUTES = 4 #FILE_NOTIFY_CHANGE_SIZE = 8 #FILE_NOTIFY_CHANGE_LAST_WRITE = $10 #FILE_NOTIFY_CHANGE_LAST_ACCESS = $20 #FILE_NOTIFY_CHANGE_CREATION = $40 #FILE_NOTIFY_CHANGE_SECURITY = $100 #FILE_NOTIFY_CHANGE_ALL = $17F ; #FILE_SHARE_DELETE = 4 ; Notify events Enumeration #FILE_ACTION_ADDED = 1 #FILE_ACTION_REMOVED #FILE_ACTION_MODIFIED #FILE_ACTION_RENAMED_OLD_NAME #FILE_ACTION_RENAMED_NEW_NAME EndEnumeration ; Notify info Structure FILE_NOTIFY_INFORMATION NextEntryOffset.l Action.l FileNameLength.l Filename.s{255} EndStructure Import "kernel32.lib" ReadDirectoryChangesW(a, b, c, d, e, f, g, h) EndImport Procedure WatchDirOrFile(DirectoryName.s, NotifyFilter.l = #FILE_NOTIFY_CHANGE_ALL) Protected buffer.FILE_NOTIFY_INFORMATION, ovlp.OVERLAPPED Protected FileAction_Filename.s ; hDir = CreateFile_(DirectoryName, #FILE_LIST_DIRECTORY, #FILE_SHARE_READ | #FILE_SHARE_WRITE | #FILE_SHARE_DELETE, #Null, #OPEN_EXISTING, #FILE_FLAG_BACKUP_SEMANTICS, #Null) ; While ReadDirectoryChangesW(hDir, @buffer, SizeOf(FILE_NOTIFY_INFORMATION), #True, NotifyFilter, bytesRead, ovlp, 0) ; FileAction_Filename = PeekS(@buffer\Filename, -1, #PB_Unicode) Select buffer\Action Case #FILE_ACTION_ADDED Debug FileAction_Filename + " was added" Case #FILE_ACTION_REMOVED Debug FileAction_Filename + " was removed" Case #FILE_ACTION_MODIFIED Debug FileAction_Filename + " was modified" Case #FILE_ACTION_RENAMED_OLD_NAME Debug FileAction_Filename + " was renamed (old name)" Case #FILE_ACTION_RENAMED_NEW_NAME Debug FileAction_Filename + " was renamed (new name)" EndSelect ; Wend ; EndProcedure ; ; E X A M P L E ; Debug GetCurrentDirectory() WatchDirOrFile(GetCurrentDirectory())
Страница: 1