Voici un petit code qui scan un répertoire pour le surveiller !
Le but est de faire quelques choses comme pour Picasa ou Songbird qui détecte lorsqu'un fichier est rajouter/déplacer/effacer pour mettre a jour la base de donnée. Le souci c'est que le disque dur n'arrête pas de tourner avez vous une idée de comment c'est fait généralement ? pour ne pas user le disque dur lorsque l'application tourne en permanence sur un ordi ?
Pour tester changer la valeur du Directory$ avec un chemin vers un répertoire avec pas trop de truc. rajouter un fichier ou retirer, normalement ça doit être indiquer dans le debugger !
Code : Tout sélectionner
Directory$ = "Z:\Test" ; Lists all entries in the Windows directory (without the contents of sub-directories)
Structure File
File.s
Checked.b
EndStructure
Global NewList FileDb.File()
Procedure Check(File.s)
Found=#False
ForEach FileDb()
If File=FileDb()\File
Found=#True
FileDb()\checked=#True
EndIf
Next
If Found=#False
Debug "New File:"+File
AddElement(FileDb())
FileDb()\File=File
FileDb()\checked=#True
EndIf
EndProcedure
Procedure ScanDirectory(Path.s="",N.l=0)
If N=0
ForEach FileDb()
FileDb()\checked=#False
Next
EndIf
If ExamineDirectory(N, Path, "*.*")
While NextDirectoryEntry(N)
If DirectoryEntryType(N) = #PB_DirectoryEntry_File
Check(Path+"\"+DirectoryEntryName(N))
ElseIf DirectoryEntryName(N)<>".." And DirectoryEntryName(N)<>"."
ScanDirectory(Path+"\"+DirectoryEntryName(N),N+1)
EndIf
Wend
FinishDirectory(N)
EndIf
If N=0
ForEach FileDb()
If FileDb()\checked=#False
Debug "Delete :"+FileDb()\File
DeleteElement(FileDb())
EndIf
Next
EndIf
EndProcedure
Procedure Scan(a)
Repeat
Delay(10)
Directory$ = "Z:\Yann\Backup"
ScanDirectory(Directory$)
ForEver
EndProcedure
CreateThread(@Scan(), 0)
If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
Until Quit = 1
EndIf