[Ex] Miroir entre deux répertoires
Posté : ven. 11 juil. 2008 15:34
par dams000
Ce code permet de selectionner deux répertoires et de les comparer afin de mettre le second à jour.
On peut l'utiliser en l'état pour faire des sauvegardes, mais c'est adaptable.
L'avantage c'est qu'il fait les sous dossiers.
Voilà :
On peut l'utiliser en l'état pour faire des sauvegardes, mais c'est adaptable.
L'avantage c'est qu'il fait les sous dossiers.
Voilà :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstants.au3>
#Include <File.au3>
#Include <Array.au3>
#include <Date.au3>
Func _CopyFile($ExistFileName, $NewFileName, $FailIfExist)
Local $ai_CopyFile = DllCall('kernel32.dll', 'long', 'CopyFile', 'str',$ExistFileName, 'str', $NewFileName, 'long', $FailIfExist)
If @error OR $ai_CopyFile[0] = 0 Then
SetError(-1)
Return 0
EndIf
Return $ai_CopyFile[0]
EndFunc
Func _MoveFile($ExistFileName, $NewFileName)
Local $ai_MoveFile = DllCall('kernel32.dll', 'long', 'MoveFile', 'str',$ExistFileName, 'str', $NewFileName)
If @error OR $ai_MoveFile[0] = 0 Then
SetError(-1)
Return 0
EndIf
Return $ai_MoveFile[0]
EndFunc
Func _FileExist($FileName)
Local $ai_FileExist = DllCall('shlwapi.dll', 'long', 'PathFileExists', 'str',$FileName)
If @error OR $ai_FileExist[0] = 0 Then
SetError(-1)
Return 0
EndIf
Return $ai_FileExist[0]
EndFunc
Func _DirectoryExist($DirectoryName)
Local $ai_DirectoryExist = DllCall('shlwapi.dll', 'long', 'PathIsDirectory', 'str',$DirectoryName)
If @error OR $ai_DirectoryExist[0] = 0 Then
SetError(-1)
Return 0
EndIf
Return $ai_DirectoryExist[0]
EndFunc
func recherche($rep,$dest,$FichierR)
$files = FileFindFirstFile($rep & "*")
Do
$file = FileFindNextFile($files)
if _DirectoryExist($rep & $file)=false then
$nbr = $nbr+1
if _FileExist($dest & $file)=false then
FileCopy($rep & $file,$dest & $file,9)
FileWriteLine($fichier, "C : " & $rep & $file & "->" & $dest & $file )
Else
$FileTime1 = FileGetTime($rep & $file,0,1)
$FileTime2 = FileGetTime($dest & $file,0,1)
if $FileTime1 > $FileTime2 then
filecopy($rep & $file,$dest & $file,9)
FileWriteLine($fichier, "M : " & $rep & $file & "->" & $dest & $file )
EndIf
EndIf
EndIf
Until $file = ""
$files = FileFindFirstFile($rep & "*")
Do
$file = FileFindNextFile($files)
if _DirectoryExist($rep & $file)=true and ($rep & $file) <> $rep then
if _DirectoryExist($dest & $file)=false Then
DirCreate($dest & $file)
FileWriteLine($fichier, "CR : " & $rep & $file & "->" & $dest & $file )
EndIf
recherche($rep & $file & "\" ,$dest & $file & "\","*")
EndIf
Until $file = ""
FileClose($files)
EndFunc
$RepSource = IniRead("Acturep.ini", "Acturep", "RepSource","")
if StringRight($RepSource,1)<>"\" Then
$RepSource = $RepSource & "\"
endif
$RepDest= IniRead("Acturep.ini", "Acturep", "RepDest","")
if StringRight($RepDest,1)<>"\" Then
$RepDest = $RepDest & "\"
endif
GUICreate("ActuRep V1.0",500,300)
;GuiSetIcon(@SystemDir & "\mspaint.exe", 0)
GUICtrlCreateLabel("Répertoire source :", 10, 40)
$inpSour = GUICtrlCreateInput($RepSource, 130, 40, 250)
$btnBrowseSour = GUICtrlCreateButton(" Parcourir ", 390, 40)
GUICtrlCreateLabel("Répertoire Destination :", 10, 80)
$inpDest = GUICtrlCreateInput($RepDest, 130, 80, 250)
$btnBrowseDest = GUICtrlCreateButton(" Parcourir ", 390, 80)
$okbutton = GuiCtrlCreateButton ("Valider",10,120,70,20)
$Cancelbutton = GuiCtrlCreateButton ("Quitter",100,120,70,20)
GuiSetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg=$Cancelbutton
ExitLoop
Case $msg = $okbutton
$repsource=guictrlread($inpsour)
$repdest= guictrlread($inpDest)
if StringRight($repsource,1)<> "\" Then
$repsource = $repsource & "\"
GUICtrlSetData($inpSour,$repsource)
EndIf
if StringRight($repdest,1)<> "\" Then
$repdest = $repdest & "\"
GUICtrlSetData($inpDest,$repdest)
EndIf
msgbox(0,"Mise à jour",$repsource & " -> " & $repdest)
$nbr=0
$fichier = FileOpen(@ScriptDir & "\rapport.txt", 2)
recherche($repsource ,$repdest ,"*")
FileWriteLine($fichier, "Nombre de lignes scannées : " & $nbr )
FileClose($fichier)
msgbox(0,"Mise à jour terminé","Le répertoire est à jour.")
case $msg=$btnbrowseSour
$bkSour = FileSelectFolder("Selectionne le répertoire source", "", 7)
GUICtrlSetData($inpSour,$bksour)
case $msg=$btnbrowseDest
$bkDest = FileSelectFolder("Selectionne le répertoire destination", "", 7)
GUICtrlSetData($inpDest,$bkdest)
EndSelect
WEnd
GUIDelete()
Exit