以前在作更新備份功能的時候,錯誤地將複製文件夾的功能採用Directory.Move函數來實現,形成了不大不小的麻煩。原本是想備份整個文件夾,可是最後卻將源文件夾裏的內容給移走了。C#的庫函數只提供了Directory.Move函數和File.Copy函數,沒有現成的複製文件夾函數。要想實現複製文件夾的功能,只能本身手動實現。對於文件夾的操做,其實最終仍是在於單個文件的操做。在正確的路徑上建立對應的文件夾,而後將文件複製到正確的文件夾裏。總體的思路是:在目標文件夾先建立一個與源文件夾相同名稱的文件夾,而後獲取源文件夾下全部的文件夾和文件。對於文件,直接移動到目標文件夾下對應的源文件夾相同名稱的文件夾內;對於文件夾,首先在目標文件目標裏建立一個相同名稱的文件夾,而後掃描源文件夾內的內容。。。函數
。。。能夠看到,這是一個遞歸的過程。遞歸的深度和文件夾的深度成正比,遞歸返回的條件是文件夾中不包含子文件夾只有文件或爲空。用代碼實現以下:spa
private void CopyDirectory(string sourcePath, string destPath) { string floderName = Path.GetFileName(sourcePath); DirectoryInfo di = Directory.CreateDirectory(Path.Combine(destPath, floderName)); string[] files = Directory.GetFileSystemEntries(sourcePath); foreach (string file in files) { if (Directory.Exists(file)) { CopyDirectory(file, di.FullName); } else { File.Copy(file, Path.Combine(di.FullName, Path.GetFileName(file)),true); } } }
這裏要注意File.Copy的用法。另外,這個函數能夠實現跨磁盤分區的複製。C#自帶的Directory.Move函數不容許跨分區移動,因此若是要實現跨分區移動,能夠先將文件夾複製到目標文件夾,再將源文件夾刪除。code