首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除多个目录中的所有文件和文件夹,但保留目录

删除多个目录中的所有文件和文件夹,但保留目录
EN

Stack Overflow用户
提问于 2010-06-02 10:56:47
回答 2查看 3K关注 0票数 2

好吧,我喜欢这段很好的代码,它看起来工作得很棒,但我似乎不能再给它添加更多的目录了

代码语言:javascript
复制
DirectoryInfo dir = new DirectoryInfo(@"C:\temp"); 

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

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

我也想添加特殊的文件夹,如历史和cookies,这样我将如何去做(我想包括至少4-5个不同的文件夹)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-02 11:12:59

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

代码语言:javascript
复制
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);
  }
}
票数 1
EN

Stack Overflow用户

发布于 2010-06-02 12:05:29

下面是一个递归函数,它将删除给定目录中的所有文件,并向下导航到目录结构。根据您对另一个答案的评论,可以提供模式字符串,以便仅处理具有给定扩展名的文件。

代码语言:javascript
复制
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");

目录是独立的,这显然可以与字符串数组或列表一起使用,以处理多个初始目录路径。

下面是重写为标准函数的相同代码,也使用递归作为参数选项。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2954708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档