C#中復制文件夾及文件的兩種方法


方法一:

/// <summary>
        /// 復制文件夾及文件
      /// </summary>
        /// <param name="sourceFolder">原文件路徑</param>
        /// <param name="destFolder">目標文件路徑</param>
        /// <returns></returns>
        public int CopyFolder(string sourceFolder, string destFolder)
        {
            try
            {
                //如果目標路徑不存在,則創建目標路徑
                if (!System.IO.Directory.Exists(destFolder))
                {
                    System.IO.Directory.CreateDirectory(destFolder);
                }
                //得到原文件根目錄下的所有文件
                string[] files = System.IO.Directory.GetFiles(sourceFolder);
                foreach (string file in files)
                {
                    string name = System.IO.Path.GetFileName(file);
                    string dest = System.IO.Path.Combine(destFolder, name);
                    System.IO.File.Copy(file, dest);//復制文件
                }
                //得到原文件根目錄下的所有文件夾
                string[] folders = System.IO.Directory.GetDirectories(sourceFolder);
                foreach (string folder in folders)
                {
                    string name = System.IO.Path.GetFileName(folder);
                    string dest = System.IO.Path.Combine(destFolder, name);
                    CopyFolder(folder, dest);//構建目標路徑,遞歸復制文件
                }
                return 1;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return 0;
            }

        }

 

 

 

方法二:

/// <summary>
        /// 復制文件夾及文件
      /// </summary>
        /// <param name="sourceFolder">原文件路徑</param>
        /// <param name="destFolder">目標文件路徑</param>
        /// <returns></returns>
        public int CopyFolder2(string sourceFolder, string destFolder)
        {
            try
            {
                string folderName = System.IO.Path.GetFileName(sourceFolder);
                string destfolderdir = System.IO.Path.Combine(destFolder,folderName);
                string[] filenames = System.IO.Directory.GetFileSystemEntries(sourceFolder);
                foreach (string file in filenames)// 遍歷所有的文件和目錄
                {
                    if (System.IO.Directory.Exists(file))
                    {
                        string currentdir = System.IO.Path.Combine(destfolderdir, System.IO.Path.GetFileName(file));
                        if (!System.IO.Directory.Exists(currentdir))
                        {
                            System.IO.Directory.CreateDirectory(currentdir);
                        }
                        CopyFolder2(file, destfolderdir);
                    }
                    else
                    {
                        string srcfileName =System.IO.Path.Combine(destfolderdir,System.IO.Path.GetFileName(file));
                        if (!System.IO.Directory.Exists(destfolderdir))
                        {
                            System.IO.Directory.CreateDirectory(destfolderdir);
                        }
                        System.IO.File.Copy(file, srcfileName);
                    }
                }

                return 1;
            }
            catch (Exception e)
            {

                MessageBox.Show(e.Message);
                return 0;
            }

        }

 

 

方法一 和 方法二 都可以實現文件夾及文件的復制,

兩者的區別是:

方法一的復制並沒有包括原文件的根目錄名稱(要復制的文件除了根目錄文件夾以外其他的都原封不動地搬到了目的地),

方法二的復制包括了原文件的根目錄名稱(要復制的文件原封不動的搬到目的地),

比如:要把E:/123的文件復制到F盤(123文件夾下包含其他文件夾及文件,比如包含了234文件夾和一個1.txt文檔),如果用方法一,只是把E盤123文件夾下的子文件夾及子文件復制到了F盤,如果用方法二,則是把E盤下的整個123文件夾都復制到了F盤!由此可見,方法一 適合重命名復制,方法二 適合直接復制!


這里需要說明一下,方法一的第22行和方法二的第32行,第二個參數指的是目標文件的全名稱,必須包括文件的名稱,不能只是路徑!

 

轉 : https://www.cnblogs.com/wangjianhui008/p/3234519.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM