Page 1 sur 1

[Ex] Synchronisation de deux emplacements

Posté : mer. 29 janv. 2014 23:25
par GhostLine
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 :)

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