【问题标题】:C# delete a folder and all files and folders within that folderC#删除一个文件夹以及该文件夹中的所有文件和文件夹
【发布时间】: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);
}

【问题讨论】:

    标签: c# directory


    【解决方案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);
        

        【讨论】:

        • 为什么要阅读手册,因为它可以更快地在谷歌上搜索并结束?
        • 这是真的
        • 确实...刚刚用谷歌搜索了这个,这篇文章是谷歌的第一个结果。
        • 我有时会提出问题,然后自己回答,以帮助未来的谷歌人。 StackOverflow 允许您同时发布问题和答案。
        • 我已经开始以这种方式完成所有本地文档。不是一个常见问题解答,更像是 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
                  

                  【讨论】:

                    猜你喜欢
                    • 2012-04-01
                    • 2018-05-19
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多