本次問題是想要拷貝文件夾,但是找了一圈發現只有File有Copy或者FileInfo的CopyTo,並沒有Directory的拷貝操作方法。 針對C#中拷貝文件夾的方法就是先生成一個目標文件夾(destinationFolder)再將(soursefolder)中的文件依次拷貝到目標文件夾中,C#並 ...
本次問題是想要拷貝文件夾,但是找了一圈發現只有File有Copy或者FileInfo的CopyTo,並沒有Directory的拷貝操作方法。
針對C#中拷貝文件夾的方法就是先生成一個目標文件夾(destinationFolder)再將(soursefolder)中的文件依次拷貝到目標文件夾中,C#並沒有提供封裝好的方法將文件夾中的文件及其子文件夾整個的拷貝過去。
下述是CopyFold代碼:
1 using System.IO; 2 3 class Program 4 { 5 static void Main() 6 { 7 string sourceFolder = @""; 8 string destinationFolder = @""; 9 10 CopyFolder(sourceFolder, destinationFolder); 11 } 12 13 static void CopyFolder(string sourceFolder, string destinationFolder) 14 { 15 DirectoryInfo dir = new DirectoryInfo(sourceFolder); 16 17 Directory.CreateDirectory(destinationFolder); 18 19 FileInfo[] files = dir.GetFiles(); 20 21 foreach (FileInfo file in files) 22 { 23 string destinationFile = Path.Combine(destinationFolder, file.Name); 24 file.CopyTo(destinationFile, false); 25 } 26 27 DirectoryInfo[] subDirs = dir.GetDirectories(); 28 29 foreach (DirectoryInfo subdir in subDirs) 30 { 31 string destinationSubDir = Path.Combine(destinationFolder, subdir.Name); 32 CopyFolder(subdir.FullName, destinationSubDir); 33 } 34 } 35 }
但是上述代碼有一個問題,如果有多個sourcefolder和多個JPG或者TXT文件在一個父級文件夾下,將sourcefolder的路徑換成父級路徑後,多出的JPG和TXT也會同時被拷貝,所以需要對上述代碼做出一些更改來達到只拷貝指定的文件夾。
拓展:
標題中的Directory和DirectoryInfo、File和FileInfo是沒有什麼區別的,帶有Info字樣的提供了更加靈活的實例方法,請註意,!!實例 方法!!!,在為查找資料之前我是將DirectoryInfo類直接和Directory類相同的方法帶調用用法,這是錯誤的。
Directory和File是靜態方法,所以可以直接File.Copy()、Directory.GetDirectories()
而DirectoryInfo和FileInfo是非靜態的,必須實例化後才能調用其中的方法,如DirectoryInfo.GetDirectories()是錯誤的!new DirectoryInfo().GetDirectories()才可以。