C# 刪除目錄與目錄中所有檔案

承上篇,有額外搬移目錄、檔案,當然也有刪除。
刪除的作法在MSDN上也提到無法刪除有子目錄與檔案的目錄,所以只好故技重施。
而在Installer的設定上,一個是屬於afterinstall call,一個為afteruninstall call。
在下一篇整合實在一起提出好了,這也是網路上蠻常看到的教學中所提到的。
using System.IO,可以讓你輕鬆coding。我coding的時候沒加,方便轉載。


因為installer不會紀錄額外目錄路徑的緣故,就自己寫個log吧。
這段要寫在afterinstall裡。

  //write additional appPath
  FileStream fsFile = new FileStream(logPath + "log.txt", FileMode.Create);
  StreamWriter swWriter = new StreamWriter(fsFile);
  swWriter.WriteLine(appPath);
  swWriter.Close();

結束安裝後會在logPath裡產生紀錄appPath的log.txt。

接著是刪除,這部份在afteruninstall。
用writeline、readline作路徑存取真的很方便。

//read addtional appPath
FileStream lsFile = new FileStream(logPath + "log.txt", FileMode.Open);
StreamReader srReader = new StreamReader(lsFile);
string line = srReader.ReadLine();
while (line != null)
{
      recursiveDel(line);
      System.IO.Directory.Delete(line);
      line = srReader.ReadLine();
}
      srReader.Close();
System.IO.File.Delete(logPath + "log.txt");


有了appPath再丟給delete function去處理就好。

//***********recursiveDel***********
private void recursiveDel(string targetPath)
{
    if (System.IO.Directory.Exists(targetPath))
    {
           //delete files
           string[] files = System.IO.Directory.GetFiles(targetPath);
           foreach (string f in files)
           {
                string fileName = System.IO.Path.GetFileName(f);
                string destFile = System.IO.Path.Combine(targetPath, fileName);
                System.IO.File.Delete(destFile);
            }
            //delete directories
            string[] dirs = System.IO.Directory.GetDirectories(targetPath);
            foreach (string d in dirs)
            { 
                string nextTarget = d + "\\";                   
                recursiveDel(nextTarget);
                System.IO.Directory.Delete(d);
             }
       }
}//End recursiveDel  


下一篇是把複製和刪除放進installer中啦,完結篇。

參考連結:


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

Related Posts

Previous
Next Post »

1 意見:

意見
22/12/11 17:23 delete

想不到一年過去了,胎死腹中 XD

Reply
avatar