C# 實做目錄與目錄下檔案複製

最近專案剛好在使用Visual Studio 2005 build MSI Installer,
但其實生成的安裝程式在預設條件碰到的限制不少,變成要利用VB或是C#等語言,
產生一個繼承class Installer,才能作很多額外的運作。


其中一項就是在User Interface使用Textbox擷取資訊,作為後面安裝的訊息。
而我是利用它來作其他資料的轉移目的地。可能覺得奇怪為什麼不用Browser選擇,
他裡面就是沒這個Interface可以用,頗糟糕。
變成要使用些C#語法去搬移檔案,不過也因此學到一些C# Syntax還蠻有趣的啦,
當成腦力激盪也不錯,比起上個專案都在一直trace code好多了。

下面就是參考了MSDN上面的作法更改成recursive的方式複製整個資料夾中的資料,
希望有緣人google到就拿去用吧!
使用方法recursive(原目錄, 目標目錄)

p.s. 網路上很多版本,可是都不是我要的,反倒是阿陸仔那邊很多。台灣設計者要加油。


//*********recursiveCopy***********
private void recursiveCopy(string sourcePath, string targetPath)
{             
    if (System.IO.Directory.Exists(sourcePath))
    {
        //copy directories
        if (!System.IO.Directory.Exists(targetPath))
            Directory.CreateDirectory(targetPath);
            string[] dirs = System.IO.Directory.GetDirectories(sourcePath);
            foreach (string d in dirs)
            {
                string nextSource = d + "\\";
                string[] directName = d.Split("\\".ToCharArray());
                string nextTarget = targetPath + directName[directName.Length - 1] + "\\";
                recursiveCopy(nextSource, nextTarget);
            }  
            //copy files
            string[] files = System.IO.Directory.GetFiles(sourcePath);
            foreach (string f in files)
            {
                string fileName = System.IO.Path.GetFileName(f);
                string destFile = System.IO.Path.Combine(targetPath, fileName);
                System.IO.File.Copy(f, destFile, true);
            }
    }
}//End recursiveCopy

參考資料:

http://msdn.microsoft.com/zh-tw/library/zd5e2z84(v=VS.80).aspx
http://msdn.microsoft.com/zh-tw/library/cc148994.aspx

Related Posts

Previous
Next Post »

3 意見

意見
匿名
16/10/14 14:50 delete

thanks!
但是 string nextTarget = targetPath + directName[directName.Length - 1] + "\\";
好像少了一條斜線
string nextTarget = targetPath + "\\" + directName[directName.Length - 1] + "\\";

Reply
avatar
16/10/14 17:55 delete

Thank you for your reply. 有點忘記當時當初實際應用上,targetPath是否有append一個backslash了。希望參考的人能注意到囉。

Reply
avatar