C#删除一个文件夹以及该文件夹中的所有文件和文件夹

Posted

技术标签:

【中文标题】C#删除一个文件夹以及该文件夹中的所有文件和文件夹【英文标题】:C# delete a folder and all files and folders within that folder 【发布时间】:2011-01-14 10:17:50 【问题描述】:

我正在尝试删除一个文件夹以及该文件夹中的所有文件和文件夹,我正在使用下面的代码并收到错误Folder is not empty,有什么建议可以做吗?

try

  var dir = new DirectoryInfo(@FolderPath);
  dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly;
  dir.Delete();
  dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[i].Index);

catch (IOException ex)

  MessageBox.Show(ex.Message);

【问题讨论】:

【参考方案1】:

对于那些遇到 DirectoryNotFoundException 的人,请添加此检查:

if (Directory.Exists(path)) Directory.Delete(path, true);

【讨论】:

【参考方案2】:

试试这个:

foreach (string files in Directory.GetFiles(SourcePath))

   FileInfo fileInfo = new FileInfo(files);
   fileInfo.Delete(); //delete the files first. 

Directory.Delete(SourcePath);// delete the directory as it is empty now.

【讨论】:

虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。Read this【参考方案3】:

试试这个。

namespace EraseJunkFiles

    class Program
    
        static void Main(string[] args)
        
            DirectoryInfo yourRootDir = new DirectoryInfo(@"C:\somedirectory\");
            foreach (DirectoryInfo dir in yourRootDir.GetDirectories())
                    DeleteDirectory(dir.FullName, true);
        
        public static void DeleteDirectory(string directoryName, bool checkDirectiryExist)
        
            if (Directory.Exists(directoryName))
                Directory.Delete(directoryName, true);
            else if (checkDirectiryExist)
                throw new SystemException("Directory you want to delete is not exist");
        
    

【讨论】:

【参考方案4】:

阅读手册:

Directory.Delete Method (String, Boolean)

Directory.Delete(folderPath, true);

【讨论】:

为什么要阅读手册,因为它可以更快地在谷歌上搜索并结束? 这是真的 确实...刚刚用谷歌搜索了这个,这篇文章是谷歌的第一个结果。 我有时会提出问题,然后自己回答,以帮助未来的谷歌人。 *** 允许您同时发布问题和答案。 我已经开始以这种方式完成所有本地文档。不是一个常见问题解答,更像是 SO 问题。即我该怎么做?或者这是什么?【参考方案5】:
public void Empty(System.IO.DirectoryInfo directory)

    try
    
        logger.DebugFormat("Empty directory 0", directory.FullName);
        foreach (System.IO.FileInfo file in directory.GetFiles()) file.Delete();
        foreach (System.IO.DirectoryInfo subDirectory in directory.GetDirectories()) subDirectory.Delete(true);
    
    catch (Exception ex)
    
        ex.Data.Add("directory", Convert.ToString(directory.FullName, CultureInfo.InvariantCulture));

        throw new Exception(string.Format(CultureInfo.InvariantCulture,"Method:0", ex.TargetSite), ex);
    

【讨论】:

【参考方案6】:

你应该使用:

dir.Delete(true);

也用于递归删除该文件夹的内容。请参阅 MSDN DirectoryInfo.Delete() overloads。

【讨论】:

【参考方案7】:

试试:

System.IO.Directory.Delete(path,true)

这将递归删除“路径”下的所有文件和文件夹,前提是您有权这样做。

【讨论】:

【参考方案8】:

呃,打个电话Directory.Delete(path, true);怎么样?

【讨论】:

【参考方案9】:

Directory.Delete 方法有一个递归布尔参数,它应该可以满足您的需要

【讨论】:

【参考方案10】:
dir.Delete(true); // true => recursive delete

【讨论】:

以上是关于C#删除一个文件夹以及该文件夹中的所有文件和文件夹的主要内容,如果未能解决你的问题,请参考以下文章

C#如何遍历指定目录以及指定目录下所有子文件夹,并获取除指定文件类型以外的所有文件的绝对路径?

c#实现遍历文件夹里的所有文件内容,然后删除某个内容?

如何删除目录中的所有文件和文件夹?

C#实现多文件上传,写到文件夹中,获取文件信息以及下载文件和删除文件

使用 C# 中的线程删除文件

C# 把一个文件夹下所有文件复制到另一个文件夹下 把一个文件夹下所有文件删除(转)