void MergeDirectory(WorkspaceDirectoryInfo WorkspaceDir, WorkspaceDirectoryInfo NewWorkspaceDir, StreamDirectoryInfo StreamDir, ThreadPoolWorkQueue Queue) { // Make sure the directory exists Directory.CreateDirectory(WorkspaceDir.GetFullName()); // Update all the subdirectories foreach (StreamDirectoryInfo StreamSubDir in StreamDir.NameToSubDirectory.Values) { WorkspaceDirectoryInfo WorkspaceSubDir; if (WorkspaceDir.NameToSubDirectory.TryGetValue(StreamSubDir.Name, out WorkspaceSubDir)) { MergeSubDirectory(WorkspaceSubDir, StreamSubDir, NewWorkspaceDir, Queue); } else { AddSubDirectory(NewWorkspaceDir, StreamSubDir, Queue); } } // Move files into this folder foreach (StreamFileInfo StreamFile in StreamDir.NameToFile.Values) { WorkspaceFileInfo WorkspaceFile; if (WorkspaceDir.NameToFile.TryGetValue(StreamFile.Name, out WorkspaceFile)) { NewWorkspaceDir.NameToFile.Add(WorkspaceFile.Name, WorkspaceFile); } else { AddFile(NewWorkspaceDir, StreamFile); } } }
void AddDirectory(WorkspaceDirectoryInfo NewWorkspaceDir, StreamDirectoryInfo StreamDir, ThreadPoolWorkQueue Queue) { // Make sure the directory exists Directory.CreateDirectory(NewWorkspaceDir.GetFullName()); // Add all the sub directories and files foreach (StreamDirectoryInfo StreamSubDir in StreamDir.NameToSubDirectory.Values) { AddSubDirectory(NewWorkspaceDir, StreamSubDir, Queue); } foreach (StreamFileInfo StreamFile in StreamDir.NameToFile.Values) { AddFile(NewWorkspaceDir, StreamFile); } }