PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Сообщение о добавлении файла


Сообщение о добавлении файла

Сообщений 1 страница 3 из 3

1

Как можно сделать, чтобы если например в папке появляется новый файл, программа выдает сообщение с определенным текстом и с сылкой на файл.

0

2

Может не самый оптимальный вариант кода (мастера предложат лучше):
При первом старте сканируем нужную директорию, далее по таймеру или при клике на кнопку снова сканируем и смотрим все совпадения...
Запусти, а потом создай на диске С новый файл и нажми кнопку....

Код:
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)

0

3

Есть специальная 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())

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Сообщение о добавлении файла