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