接觸C#已近兩年,現將整理的知識做了一下總結,以方便自己和大家學習!本節要說的是C#中復制文件夾及文件的兩種方法,閑話不說,直接附代碼如下:
方法一:
1 /// <summary> 2 /// 復制文件夾及文件 3 /// </summary> 4 /// <param name="sourceFolder">原文件路徑</param> 5 /// <param name="destFolder">目標文件路徑</param> 6 /// <returns></returns> 7 public int CopyFolder(string sourceFolder, string destFolder) 8 { 9 try 10 { 11 //如果目標路徑不存在,則創建目標路徑 12 if (!System.IO.Directory.Exists(destFolder)) 13 { 14 System.IO.Directory.CreateDirectory(destFolder); 15 } 16 //得到原文件根目錄下的所有文件 17 string[] files = System.IO.Directory.GetFiles(sourceFolder); 18 foreach (string file in files) 19 { 20 string name = System.IO.Path.GetFileName(file); 21 string dest = System.IO.Path.Combine(destFolder, name); 22 System.IO.File.Copy(file, dest);//復制文件 23 } 24 //得到原文件根目錄下的所有文件夾 25 string[] folders = System.IO.Directory.GetDirectories(sourceFolder); 26 foreach (string folder in folders) 27 { 28 string name = System.IO.Path.GetFileName(folder); 29 string dest = System.IO.Path.Combine(destFolder, name); 30 CopyFolder(folder, dest);//構建目標路徑,遞歸復制文件 31 } 32 return 1; 33 } 34 catch (Exception e) 35 { 36 MessageBox.Show(e.Message); 37 return 0; 38 } 39 40 }
方法二:
1 /// <summary> 2 /// 復制文件夾及文件 3 /// </summary> 4 /// <param name="sourceFolder">原文件路徑</param> 5 /// <param name="destFolder">目標文件路徑</param> 6 /// <returns></returns> 7 public int CopyFolder2(string sourceFolder, string destFolder) 8 { 9 try 10 { 11 string folderName = System.IO.Path.GetFileName(sourceFolder); 12 string destfolderdir = System.IO.Path.Combine(destFolder,folderName); 13 string[] filenames = System.IO.Directory.GetFileSystemEntries(sourceFolder); 14 foreach (string file in filenames)// 遍歷所有的文件和目錄 15 { 16 if (System.IO.Directory.Exists(file)) 17 { 18 string currentdir = System.IO.Path.Combine(destfolderdir, System.IO.Path.GetFileName(file)); 19 if (!System.IO.Directory.Exists(currentdir)) 20 { 21 System.IO.Directory.CreateDirectory(currentdir); 22 } 23 CopyFolder2(file, destfolderdir); 24 } 25 else 26 { 27 string srcfileName =System.IO.Path.Combine(destfolderdir,System.IO.Path.GetFileName(file)); 28 if (!System.IO.Directory.Exists(destfolderdir)) 29 { 30 System.IO.Directory.CreateDirectory(destfolderdir); 31 } 32 System.IO.File.Copy(file, srcfileName); 33 } 34 } 35 36 return 1; 37 } 38 catch (Exception e) 39 { 40 41 MessageBox.Show(e.Message); 42 return 0; 43 } 44 45 }
方法一 和 方法二 都可以實現文件夾及文件的復制,兩者的區別是:方法一的復制並沒有包括原文件的根目錄名稱(要復制的文件除了根目錄文件夾以外其他的都原封不動地搬到了目的地),方法二的復制包括了原文件的根目錄名稱(要復制的文件原封不動的搬到目的地),比如:要把E:/123的文件復制到F盤(123文件夾下包含其他文件夾及文件,比如包含了234文件夾和一個1.txt文檔),如果用方法一,只是把E盤123文件夾下的子文件夾及子文件復制到了F盤,如果用方法二,則是把E盤下的整個123文件夾都復制到了F盤!由此可見,方法一 適合重命名復制,方法二 適合直接復制!
這里需要說明一下,方法一的第22行和方法二的第32行,第二個參數指的是目標文件的全名稱,必須包括文件的名稱,不能只是路徑!