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);
            }
        }