C# File.Copy 实现磁盘间文件备份
需求:需要把D盘Source文件夹中的所有名称包含"LTE"的子文件夹Copy到E盘的Backup文件中,实现特定文件夹每天备份。
步骤:1,遍历D盘Source文件夹找出所有名称包含LTE的文件,文件路径存放到List<string>中
2,遍历List<string>,把所有文件Copy到E盘的备份文件夹中
实现效果:Copy→
项目中借助txt文件存放源文件夹路径和目的文件夹路径,以便修改:
解决方案截图:
实现代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.DirectoryServices; using System.IO; namespace CopyLTE { class Program { static void Main(string[] args) { try { string txtPath = @"..\..\Dir\directory.txt"; string srcPath = ""; string aimPath = ""; string KeyWords = ""; List<string> KeyFloderList = new List<string>(); if (File.Exists(txtPath) == false) { Console.WriteLine("directory.txt不存在,無法獲取Copy路徑"); } else { GetCopyPath(txtPath, out srcPath, out aimPath, out KeyWords); if (srcPath == "" || aimPath == "" || KeyWords == "") { Console.WriteLine("請在directory.txt,輸入Copy的源文件夾,目的文件,和KeyWords"); } else { DirectoryInfo FolderSource = new DirectoryInfo(srcPath); foreach (DirectoryInfo NextFolder in FolderSource.GetDirectories()) { if (NextFolder.FullName.Contains(KeyWords)) { KeyFloderList.Add(NextFolder.FullName); } } } } if (KeyFloderList.Count > 0) { foreach (string FloderPath in KeyFloderList) { //Copy From Source To Backup CopyDirectory(FloderPath, aimPath); } } } catch (Exception ex) { throw ex; } } // private static void CopyDirectory(string srcdir, string desdir) { string folderName = srcdir.Substring(srcdir.LastIndexOf("\\") + 1); string desfolderdir = desdir + "\\" + folderName; if (desdir.LastIndexOf("\\") == (desdir.Length - 1)) { desfolderdir = desdir + folderName; } string[] filenames = Directory.GetFileSystemEntries(srcdir); foreach (string file in filenames)// 遍历所有的文件和目录 { if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件 { string currentdir = desfolderdir + "\\" + file.Substring(file.LastIndexOf("\\") + 1); if (!Directory.Exists(currentdir)) { Directory.CreateDirectory(currentdir); } CopyDirectory(file, desfolderdir); } else // 否则直接copy文件 { string srcfileName = file.Substring(file.LastIndexOf("\\") + 1); srcfileName = desfolderdir + "\\" + srcfileName; if (File.Exists(srcfileName)) { File.Delete(srcfileName); //Delete Old Files } if (!Directory.Exists(desfolderdir)) { Directory.CreateDirectory(desfolderdir); } File.Copy(file, srcfileName); } } } //獲得路徑 public static void GetCopyPath(string strTxt, out string From, out string To, out string keyWords) { try { string[] stringLines = File.ReadAllLines(strTxt, Encoding.Default); if (stringLines.Length >= 3) { From = stringLines[0].ToString(); To = stringLines[1].ToString(); keyWords = stringLines[2].ToString(); } else { From = ""; To = ""; keyWords = ""; Console.WriteLine("請在directory.txt,輸入Copy的源文件夾,目的文件,和KeyWords"); } } catch (Exception ex) { throw ex; } } } }