zoukankan      html  css  js  c++  java
  • 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;
                }
            }
        }
    }
  • 相关阅读:
    SR-IOV(Single Root I/O Virtualization)
    DHCP&DHCPv6
    Linux 上的基础网络设备详解
    当Linux用尽内存-oom
    真爱了--网络工程师技能图谱
    程序员必备技能:如何画好架构图?
    Linux内存使用情况以及内存泄露情况
    Neutron 消息回调系统
    linux bridge
    OpenStack-Neutron-code
  • 原文地址:https://www.cnblogs.com/siri/p/3067836.html
Copyright © 2011-2022 走看看