From 20f3709ac9dea156ade5f0d26326ad6ae68761e6 Mon Sep 17 00:00:00 2001 From: limil Date: Sat, 1 Nov 2025 12:09:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Src/Tools/FolderCloner.cs | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) 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}"); } } }