2009-06-30 167 views
28

可能重複:
Best way to copy the entire contents of a directory in C#如何在.NET中複製文件夾和所有子文件夾和文件?

我想與它的所有子文件夾和文件從一個位置複製.NET夾到另一個。什麼是最好的方法來做到這一點?

我在System.IO.File類中看到Copy方法,但想知道是否有比搜索目錄樹更簡單,更好或更快的方法。

+0

http://xneuron.wordpress.com/2007/04/12/copy-directory-and-its-content-to-another-directory-in-c/可能會對你有所幫助;它顯示了一個簡單的遞歸方法 – 2009-07-01 00:03:03

+1

我期待在需要對文件系統執行操作時,因爲我有一個合法的藉口來使用遞歸! – mmcdole 2009-07-01 00:46:46

回答

49

那麼,有史蒂夫引用的VisualBasic.dll實現,這裏是我用過的東西。

private static void CopyDirectory(string sourcePath, string destPath) 
{ 
    if (!Directory.Exists(destPath)) 
    { 
     Directory.CreateDirectory(destPath); 
    } 

    foreach (string file in Directory.GetFiles(sourcePath)) 
    { 
     string dest = Path.Combine(destPath, Path.GetFileName(file)); 
     File.Copy(file, dest); 
    } 

    foreach (string folder in Directory.GetDirectories(sourcePath)) 
    { 
     string dest = Path.Combine(destPath, Path.GetFileName(folder)); 
     CopyDirectory(folder, dest); 
    } 
} 
2

如果你沒有得到更好的...也許使用Process.Start來觸發robocopy.exe

+0

與Process.Start一起運行時,Robocopy不會正確解析引號,因此您的源/目標路徑不得包含空格。如果他們這樣做,你必須使用8dot3文件名。 Robocopy似乎正確接受報價的唯一時間來自命令行或BAT文件。 – Brain2000 2011-12-02 12:35:52

12

米哈爾塔拉加引用了他的post如下:

  • 微軟爲什麼不應該有在.NET中Directory.Copy()操作說明。
  • Microsoft.VisualBasic.dll程序集中的CopyDirectory()實現。

但是,基於File.Copy()Directory.CreateDirectory()的遞歸實現應該滿足最基本的需求。

相關問題