[Ex] Synchronisation de deux emplacements
Posté : mer. 29 janv. 2014 23:25
J'ai un peu joué avec hier soir avec la nouvelle version d'AutoIt 
Ci après, un bout de code permettant la synchronisation de deux emplacements disques, de manière récursive, supprimant ce qui n'est plus sur la source sur la cible, et donnant des attributs de date de création identiques aux originaux aux copies.
En espérant que cela puisse servir à quelqu'un

Ci après, un bout de code permettant la synchronisation de deux emplacements disques, de manière récursive, supprimant ce qui n'est plus sur la source sur la cible, et donnant des attributs de date de création identiques aux originaux aux copies.
En espérant que cela puisse servir à quelqu'un

Code : Tout sélectionner
#include <file.au3>
#include <Array.au3>
$chemin_source = "E:\Program Files (x86)"
$chemin_destination = "E:\Program Files (x86) - Copy"
$source = _FileListToArrayRec($chemin_source, "*", 0, 1)
$destination = _FileListToArrayRec($chemin_destination, "*", 0, 1)
;~ 1 - On recopie ce qui est sur la source et qui n'est pas sur la cible
For $i = 1 To UBound($source) - 1
$recherche_copie = _ArraySearch($destination, $source[$i])
If $recherche_copie = -1 Then
FileCopy($chemin_source & "\" & $source[$i] & "\", $chemin_destination & "\" & $source[$i] & "\", $FC_CREATEPATH)
FileSetTime($chemin_destination & "\" & $source[$i], FileGetTime($chemin_source & "\" & $source[$i], $FT_CREATED, 1), $FT_CREATED)
ConsoleWrite("Ajout " & $chemin_destination & "\" & $source[$i] & " - création" & @CR)
ElseIf FileGetTime($chemin_destination & "\" & $destination[$recherche_copie], $FT_CREATED, 1) <> FileGetTime($chemin_source & "\" & $source[$i], $FT_CREATED, 1) Then
FileCopy($chemin_source & "\" & $source[$i] & "\", $chemin_destination & "\" & $source[$i] & "\", $FC_OVERWRITE)
FileSetTime($chemin_destination & "\" & $source[$i], FileGetTime($chemin_source & "\" & $source[$i], $FT_CREATED, 1), $FT_CREATED)
ConsoleWrite("Rempl. " & $chemin_destination & "\" & $source[$i] & " - timestamp" & @CR)
ElseIf FileGetSize($chemin_destination & "\" & $destination[$recherche_copie]) <> FileGetSize($chemin_source & "\" & $source[$i]) Then
FileCopy($chemin_source & "\" & $source[$i] & "\", $chemin_destination & "\" & $source[$i] & "\", $FC_OVERWRITE)
FileSetTime($chemin_destination & "\" & $source[$i], FileGetTime($chemin_source & "\" & $source[$i], $FT_CREATED, 1), $FT_CREATED)
ConsoleWrite("Rempl. " & $chemin_destination & "\" & $source[$i] & " - taille" & @CR)
EndIf
Next
;~ 2 - On efface ce qui est sur la cible mais qui n'est plus sur la source
For $j = 1 To UBound($destination) - 1
If _ArraySearch($source, $destination[$j]) = -1 Then
FileDelete($chemin_destination &"\"& $destination[$j])
DirRemove($chemin_destination &"\"& $destination[$j & "\"], 1)
ConsoleWrite("Suppr. "&$chemin_destination&"\" & $destination[$j] & @CR)
EndIf
Next