diff --git a/Src/Tools/FolderCloner.cs b/Src/Tools/FolderCloner.cs index 7b179b5..415402b 100644 --- a/Src/Tools/FolderCloner.cs +++ b/Src/Tools/FolderCloner.cs @@ -42,26 +42,29 @@ public static class FolderCloner { return; } - foreach (string subDirPath in Directory.GetDirectories(source, "*", SearchOption.AllDirectories)) + var queue = new Queue(); + queue.Enqueue(source); + while (queue.Count > 0) { - string newSubDirPath = subDirPath.Replace(source, dest); - Directory.CreateDirectory(newSubDirPath); - } - foreach (string filePath in Directory.GetFiles(source, "*", SearchOption.AllDirectories)) - { - string newFilePath = filePath.Replace(source, dest); - string directoryName = Path.GetDirectoryName(newFilePath); - if (!Directory.Exists(directoryName)) - { - Directory.CreateDirectory(directoryName); - } + var dir = queue.Dequeue(); try { - using (File.Create(newFilePath)) { } + foreach (var filePath in Directory.GetFiles(dir)) + { + var newFilePath = Path.Combine(dest, Path.GetRelativePath(source, filePath)); + using var _ = File.Create(newFilePath); + } + + foreach (var dirPath in Directory.GetDirectories(dir)) + { + queue.Enqueue(dirPath); + var newDirPath = Path.Combine(dest, Path.GetRelativePath(source, dirPath)); + Directory.CreateDirectory(newDirPath); + } } catch (Exception ex) { - Console.WriteLine($"创建文件失败 {newFilePath}: {ex.Message}"); + Console.WriteLine($"Clone失败 {ex.Message}"); } } }