2012-12-14 386 views
1

可能重複:
DirectoryInfo.Delete vs Directory.Delete刪除包含的文件夾不是文件夾它自己?

我做了這個代碼清空一些文件,我經常刪除,如溫度和MSN在Windows cahes文件。

代碼1

我可以添加新的路徑來申請DeleteContains方法簡單的方法我只是路徑添加到列表中

碼2

不會讓我儘可能多的路徑添加我希望我必須爲每個路徑和一個新的循環創建新的字符串數組

無論如何要使用code1刪除包含文件夾而不是文件夾及其包含?

任何在code1的foreach中工作的代碼2?

因爲有些文件夾可以刪除或刪除它們會引起問題的一些應用程序和應用程序不會再次它的工作就像

「C:\用戶\用戶名\應用程序數據\本地的\ Temp」

而其他文件夾中即可,沒有問題刪除它像MSN兌現

「C:\用戶\用戶名\應用程序數據\本地\微軟\的Windows Live \聯繫人」

代碼1

 private void Clear_Click(object sender, EventArgs e) 
    { 
     List<DirectoryInfo> FolderToClear = new List<DirectoryInfo>(); 

     // here is a list of files I want to delete 

     FolderToClear.Add(new DirectoryInfo("path1")); 
     FolderToClear.Add(new DirectoryInfo("path2")); 
     FolderToClear.Add(new DirectoryInfo("path3")); 
     FolderToClear.Add(new DirectoryInfo("path4")); 

     foreach (DirectoryInfo directory in FolderToClear) 
     { 
      directory.Delete(true); 
     } 
    } 

碼2

 private void DeleteContents(string Path) 
    { 
     string[] DirectoryList = Directory.GetDirectories(Path1); 
     string[] FileList = Directory.GetFiles(Path1); 

     foreach (string xin FileList) 
     { 
      File.Delete(x); 
     } 
     foreach (string x in DirectoryList) 
     { 
      Directory.Delete(x, true); 
     } 
    } 

回答

4

嘗試:

DirectoryInfo directory = new DirectoryInfo("Path"); 
foreach (FileInfo fi in directory.GetFiles()) 
{ 
    fi.Delete(); 
} 

更重要的是,這裏是一個遞歸,將刪除您提供的DirectoryInfo下的所有文件和子目錄。

注意:在這裏沒有任何東西可以處理文件鎖,因此如果打開第th個文件就會彈出。這應該讓你開始。

public void KeepTheseFolders(DirectoryInfo dirInfo) 
    { 
     DeleteFolder(new DirectoryInfo("Path1"), false); 
     DeleteFolder(new DirectoryInfo("Path2"), false); 
     DeleteFolder(new DirectoryInfo("Path3"), false); 
     DeleteFolder(new DirectoryInfo("Path4"), false); 
    } 

    public void DeleteFolder(DirectoryInfo dirInfo, bool deleteDirectory) 
    { 
     //Check for sub Directories 
     foreach (DirectoryInfo di in dirInfo.GetDirectories()) 
     { 
      //Call itself to delete the sub directory 
      DeleteFolder(di, true); 
     } 

     //Delete Files in Directory 
     foreach (FileInfo fi in dirInfo.GetFiles()) 
     { 
      fi.Delete(); 
     } 

     //Finally Delete Empty Directory if optioned 
     if (deleteDirectory) 
     { 
      dirInfo.Delete(); 
     } 
    } 

增加,所以你可以保留原來的文件夾

+1

而鑑於這是我們講的,每包中調用一個try/catch刪除TEMP。 – leppie

相關問題