С # удалить папку и все файлы и папки в этой папке

106

Я пытаюсь удалить папку и все файлы и папки в этой папке, я использую приведенный ниже код и получаю сообщение об ошибке 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);
}
Джейми
источник

Ответы:

168
dir.Delete(true); // true => recursive delete
Томми Карлье
источник
112

Прочтите руководство:

Directory.Delete - метод (строка, логическое значение)

Directory.Delete(folderPath, true);
Морфилдур
источник
68
Зачем читать руководство, если его гораздо быстрее погуглить и оказаться здесь?
регги-гитара
5
Это так верно,
Корвин
4
Действительно ... только что погуглил, и этот пост был первым результатом от Google.
MasterN8
2
Иногда я задаю вопрос, а затем отвечаю на него сам, чтобы помочь будущим гуглерам. StackOverflow позволяет одновременно публиковать вопрос и ответ.
DharmaTurtle
1
Так я начал делать всю свою локальную документацию. Не совсем FAQ, больше похоже на ТАК вопросы. т.е. как мне? или что это?
Пол Дуэр
23

Пытаться:

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

Это рекурсивно удалит все файлы и папки по «пути», если у вас есть на это разрешения.

jinsungy
источник
6

Эээ, а как насчет того, чтобы просто позвонить Directory.Delete(path, true);?

Дмитрий Нестерук
источник
5

Метод Directory.Delete имеет рекурсивный логический параметр, он должен делать то, что вам нужно.

Паоло Тедеско
источник
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");
        }
    }
}
Росидин Бима
источник
1

Для тех из вас, кто сталкивается с DirectoryNotFoundException, добавьте эту проверку:

if (Directory.Exists(path)) Directory.Delete(path, true);
Истер
источник
0
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);
    }
}
dekdev
источник
0

Попробуй это:

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.
Принц
источник
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа. Прочтите это
Shanteshwar Inde