删除多个目录中的所有文件和文件夹,但离开directoy

删除多个目录中的所有文件和文件夹,但离开directoy

问题描述:

嗯,我喜欢这个漂亮的代码在这里似乎赫然工作,但我似乎无法任意多个目录添加到它删除多个目录中的所有文件和文件夹,但离开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

也许这样的事情会有所帮助。我没有测试它。

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

这是一个递归函数,它将删除给定目录中的所有文件并向下浏览目录结构。可以提供模式字符串,以便只对给定扩展名的文件起作用,就像您对其他答案的评论一样。

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