2010-06-02 72 views
2

嗯,我喜歡這個漂亮的代碼在這裏似乎赫然工作,但我似乎無法任意多個目錄添加到它刪除多個目錄中的所有文件和文件夾,但離開directoy

DirectoryInfo dir = new DirectoryInfo(@"C:\temp"); 

foreach(FileInfo files in dir.GetFiles()) 
{ 
    files.Delete(); 
} 

foreach (DirectoryInfo dirs in dir.GetDirectories()) 
{ 
    dirs.Delete(true); 
} 

我還想添加特殊文件夾以及歷史記錄和餅乾等,我將如何去做(我想包括至少4-5個不同的文件夾)

+1

你是什麼意思「添加目錄到它」? – logicnp 2010-06-02 03:09:43

回答

1

也許這樣的事情會有所幫助。我沒有測試它。

public void DeleteDirectoryFolders(DirectoryInfo dirInfo){ 
    foreach (DirectoryInfo dirs in dirInfo.GetDirectories()) 
    { 
     dirs.Delete(true); 
    } 
} 

public void DeleteDirectoryFiles(DirectoryInfo dirInfo) { 
    foreach(FileInfo files in dirInfo.GetFiles()) 
    { 
     files.Delete(); 
    } 
} 

public void DeleteDirectoryFilesAndFolders(string dirName) { 
    DirectoryInfo dir = new DirectoryInfo(dirName); 
    DeleteDirectoryFiles(dir) 
    DeleteDirectoryFolders(dir) 
} 

public void main() { 
    List<string> DirectoriesToDelete; 
    DirectoriesToDelete.add("c:\temp"); 
    DirectoriesToDelete.add("c:\temp1"); 
    DirectoriesToDelete.add("c:\temp2"); 
    DirectoriesToDelete.add("c:\temp3"); 
    foreach (string dirName in DirectoriesToDelete) { 
    DeleteDirectoryFilesAndFolders(dirName); 
    } 
} 
+0

類似的東西,但所有在1按鈕點擊事件也很高興有在那裏掃描整個驅動器和刪除所有特定的擴展名,這將是很好的。 – NightsEVil 2010-06-02 03:51:01

0

這是一個遞歸函數,它將刪除給定目錄中的所有文件並向下瀏覽目錄結構。可以提供模式字符串,以便只對給定擴展名的文件起作用,就像您對其他答案的評論一樣。

Action<string,string> fileDeleter = null; 
fileDeleter = (directoryPath, pattern) => 
{ 
    string[] files; 
    if (!string.IsNullOrEmpty(pattern)) 
     files = Directory.GetFiles(directoryPath, pattern); 
    else 
     files = Directory.GetFiles(directoryPath); 

    foreach (string file in files) 
    { 
     File.Delete(file); 
    } 

    string[] directories = Directory.GetDirectories(directoryPath); 
    foreach (string dir in directories) 
     fileDeleter(dir, pattern); 
}; 

string path = @"C:\some_folder\"; 
fileDeleter(path, "*.bmp"); 

目錄以其它方式單獨留下,這顯然可以以與陣列或字符串列表使用具有多個初始目錄路徑工作。

以下是與標準函數相同的代碼,也將遞歸作爲參數選項。

public void DeleteFilesFromDirectory(string directoryPath, string pattern, bool includeSubdirectories) 
{ 
    string[] files; 
    if (!string.IsNullOrEmpty(pattern)) 
     files = Directory.GetFiles(directoryPath, pattern); 
    else 
     files = Directory.GetFiles(directoryPath); 

    foreach (string file in files) 
    { 
     File.Delete(file); 
    } 

    if (includeSubdirectories) 
    { 
     string[] directories = Directory.GetDirectories(directoryPath); 
     foreach (string dir in directories) 
      DeleteFilesFromDirectory(dir, pattern, includeSubdirectories); 
    } 
} 
+0

得到「使用泛型類型'System.Action '需要1類型參數」我目前在Visual Studio Express 2010中,但我的目標框架是2.0,如果它有幫助 – NightsEVil 2010-06-02 04:19:21

+0

@NightsEVil,我相信Action的多重參數。 NET 3.5+,但不要在此引用我。我將添加一個標準功能代碼示例。 – 2010-06-02 04:37:13

+0

但它需要是一個點擊事件像私人無效button5_Click(對象發件人,EventArgs e) – NightsEVil 2010-06-02 05:55:59

相關問題