把一个盘下的文件夹(包括子文件夹)下的所有文件拷贝到另外一个盘(C#)

时间:2022-08-04 21:39:32

直接上代码:

/***

 *

 *  File类操作,Directory类操作

 *  要求:把E盘下的Test文件夹(包括子文件夹)下的所有文件拷贝到F

 *  思路:1 拿到FTest文件夹(包括子文件夹)下的所有文件的路径,并把它们存入集合SourceFilePathArray中。

 *        2  同时拿到文件夹的路径时,把路径中的E:改为F:,这样就可以在F盘创建相应的空文件夹。

 *        3 SourceFilePathArray集合中所有路径的E:该为F:,然后进行一一对应存入另外一个集合TargetFilePathArray中。

 *        4 利用SourceFilePathArray集合中的路径为源路径,集合TargetFilePathArray中的路径为目标路径,进行一一拷贝。

 *

 */

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

 

namespace IO练习

{

    class Demo3

    {

        static void Main(string[] args)

        {

            Demo3 obj = new Demo3();

            obj.Test1();

            Console.ReadKey();

        }

 

        //源文件路径存储集合

        List<string> SourceFilePathArray = new List<string>();

        //目标文件路径存储集合

        List<string> TargetFilePathArray = new List<string>();

 

        /// <summary>

        /// E盘下的Test文件夹的所有文件拷贝到F

        /// </summary>

        internal void Test1() {

            //源文件路径

            string SourcePath = @"E:\Test";

            //目标文件路径,把E盘替换成F

            string TargePath = SourcePath.Replace("E:", "F:");

            GetDirName(SourcePath);

            //把源文件中集合中的文件路径改为目标文件的路径,并一一对应存入另外一个集合

            foreach (var item in SourceFilePathArray)

            {

                string  Stritem = item.Replace(SourcePath, TargePath);

                TargetFilePathArray.Add(Stritem);

            }

            //进行文件拷贝

            for (int i = 0; i < SourceFilePathArray.Count; i++)

            {

                Console.WriteLine(TargetFilePathArray[i]);

                File.Copy(SourceFilePathArray[i], TargetFilePathArray[i], true);

            }

            Console.WriteLine("拷贝完成");

        }

        

        /// <summary>

        /// 获取文件夹下的子文件夹的路径

        /// </summary>

        /// <param name="FileDir">文件夹路径</param>

        private void GetDirName(string FileDir) {

            string TargePath = FileDir.Replace("E:", "F:");

            //F盘创建相应的文件夹,不然没法复制

            if(!Directory.Exists(TargePath)){

                Directory.CreateDirectory(TargePath);

            }

            if(Directory.Exists(FileDir)){

                //获取该文件夹下的所有文件

                GetFileName(FileDir);

                //获取该文件夹下的所有子文件夹

                string[] DirNameArray = Directory.GetDirectories(FileDir);

                foreach (var item in DirNameArray)

                {

                    if(Directory.Exists(item)){

                         //递归调用获取子文件夹的下一级文件夹

                        GetDirName(item);

                    }

                }

            }

        }

 

 

        /// <summary>

        /// 获取指定文件夹路径下的文件,并存入集合中

        /// </summary>

        /// <param name="FilePath">文件夹的路径</param>

        private void GetFileName(string FilePath)

        {

            if (Directory.Exists(FilePath))

            {

                //获取该文件夹下的所有文件名,不包括子文件夹

                string[] FileArray = Directory.GetFiles(FilePath);

                foreach (var item in FileArray)

                {

                    if (item != null)

                    {

                        //把文件名存入集合中

                        SourceFilePathArray.Add(item);

                    } 

                }

            }

 

        }

    }

}