public static void CopyDirectory(string sourceDirPath,string SaveDirPath) { try { //如果指定的存儲路徑不存在,則創建該存儲路徑 if (!Directory.Exists(SaveDirPath)) { //創建 Directory.CreateDirectory(SaveDirPath); } //獲取源路徑文件的名稱 string[] files = Directory.GetFiles(sourceDirPath); //遍歷子文件夾的所有文件 foreach(string file in files) { string pFilePath = SaveDirPath + "\\" + Path.GetFileName(file); if (File.Exists(pFilePath)) continue; File.Copy(file, pFilePath, true); } string[] dirs = Directory.GetDirectories(sourceDirPath); //遞歸,遍歷文件夾 foreach (string dir in dirs) { CopyDirectory(dir, SaveDirPath + "\\" + Path.GetFileName(dir)); } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
第二種
static void CopyFolder(string srcPath, string desPath) { string strFolderName = srcPath.Substring(srcPath.LastIndexOf("\\") + 1, srcPath.Length - srcPath.LastIndexOf("\\") - 1); //獲得文件名夾名 if (!Directory.Exists(desPath + "\\" + strFolderName)) Directory.CreateDirectory(desPath + "\\" + strFolderName);//目標文件夾沒此文件夾,則創建 string[] strFiles = Directory.GetFiles(srcPath, "", SearchOption.AllDirectories);//獲得文件夾所有文件 foreach (string strFilesElement in strFiles) { var strFileName = strFilesElement.Substring(strFilesElement.LastIndexOf("\\") + 1, strFilesElement.Length - strFilesElement.LastIndexOf("\\") - 1); //獲得文件名 string tarAddress = desPath + "\\" + strFileName;//目標路徑 File.Copy(strFilesElement, tarAddress, true);//復制 } DirectoryInfo dirInfo = new DirectoryInfo(srcPath);//獲得其他文件,對每個文件夾做遞歸操作 DirectoryInfo[] dirPath = dirInfo.GetDirectories(); foreach (var dirPathElement in dirPath) { CopyFolder(srcPath + "\\" + dirPathElement.Name, desPath + "\\" + dirPathElement.Name); } }
