//Folder是需要复制的总目录,lastpath是目标目录 private void CopyFile(DirectoryInfo Folders, string lastpath) { //首先复制目录下的文件 foreach (FileInfo fileInfo in Folders.GetFiles()) { if (fileInfo.Exists) { //如果列表有记录的文件,就跳过 // if (filePaths.Contains(fileInfo.FullName)) continue; string filename = fileInfo.FullName.Substring(fileInfo.FullName.LastIndexOf('\')); fileInfo.CopyTo(lastpath + filename, true); } } //其次复制目录下的文件夹,并且进行遍历 foreach (DirectoryInfo Folder in Folders.GetDirectories()) { //如果有记录在列表中,则跳过该目录 //if (folderPaths.Contains(Folder.FullName)) continue; string Foldername = Folder.FullName.Substring(Folder.FullName.LastIndexOf('\')); //复制后文件夹目录 string copypath = lastpath + Foldername; //创建文件夹 if (!Directory.Exists(copypath)) Directory.CreateDirectory(copypath); //将目录加深,遍历子目录中的文件 lastpath = copypath; //子目录递归调用,遍历子目录 CopyFile(Folder, lastpath); //上一个子目录中归来,还原目录深度,循环至下一子目录 lastpath = lastpath.Substring(0, lastpath.LastIndexOf('\')); } }
使用的是递归的方式。