Login | Register   
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB5,VB6
Expertise: Intermediate
Jul 14, 2001

SynchronizeDirectoryTrees - Synchronize files in two directory trees

' Synchronize two directory subtrees
'
' This routine compares source and dest directory trees and copies files
' from source that are newer than (or are missing in) the destination directory

' if TWOWAYSYNC is True, files are synchronized in both ways

' NOTE: requires the CompareDirectories and SynchronizeDirectories routines
'       and a reference to the Microsoft Scripting Runtime type library

Sub SynchronizeDirectoryTrees(ByVal sourceDir As String, _
    ByVal destDir As String, Optional ByVal TwoWaySync As Boolean)
    Dim fso As New Scripting.FileSystemObject
    Dim sourceFld As Scripting.Folder
    Dim destFld As Scripting.Folder
    Dim fld As Scripting.Folder
    Dim col As New Collection
    
    ' we need this in case the dest subdir doesn't exist
    On Error Resume Next
    
    ' get reference to source and dest folder objects
    Set sourceFld = fso.GetFolder(sourceDir)
    Set destFld = fso.GetFolder(destDir)

    ' create the destination directory, if necessary
    If Err Then
        ' if the destination directory doesn't exist,
        '  create it and copy all files there
        ' (this is all we need)
        fso.CopyFolder sourceDir, destDir
        ' nothing else to do
        Exit Sub
    End If
    
    ' synchronize the root directories
    SynchronizeDirectories sourceDir, destDir, TwoWaySync
    
    ' ensure that dir names have a training backslash
    If Right$(sourceDir, 1) <> "\" Then sourceDir = sourceDir & "\"
    If Right$(destDir, 1) <> "\" Then destDir = destDir & "\"
    
    ' repeat for all the subdirectories in the source directory
    For Each fld In sourceFld.SubFolders
        ' remember that we have processed this subdir
        col.Add fld.Name, fld.Name
        
        ' call this routine recursively
        SynchronizeDirectoryTrees fld.Path, destDir & fld.Name, TwoWaySync
    Next
    
    ' if two-way synchronization was requested, ensure that all subdirs in dest
    ' directories are copied into source directory
    If TwoWaySync Then
        For Each fld In destFld.SubFolders
            If col(fld.Name) = "" Then
                ' we get here only if the folder name isn't in COL,
                '  and therefore
                ' if this subdirectory isn't in the source directory
                fso.CopyFolder fld.Path, sourceDir & fld.Name
            End If
        Next
    End If

End Sub

Francesco Balena
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap