C # bir klasörü ve bu klasör içindeki tüm dosyaları ve klasörleri silin


106

Bir klasörü ve bu klasör içindeki tüm dosya ve klasörleri silmeye çalışıyorum, aşağıdaki kodu kullanıyorum ve hatayı alıyorum Folder is not empty, ne yapabileceğim konusunda herhangi bir öneri?

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);
}

Yanıtlar:



112

Kılavuzu okuyun:

Directory.Delete Yöntemi (Dize, Boolean)

Directory.Delete(folderPath, true);

68
El kitabını Google'da aramak çok daha hızlıyken neden burada okuyasınız?
reggaeguitar

5
Bu çok doğru
Corvin

4
Gerçekten ... bunu Google'da araştırdım ve bu gönderi google'ın ilk sonucuydu.
MasterN8

2
Bazen yaptığım şey, gelecekteki Google çalışanlarına yardımcı olmak için soruyu sorup ardından kendim yanıtlamaktır. StackOverflow, soru ve yanıtı aynı anda göndermenize olanak tanır.
DharmaTurtle

1
Tüm yerel dokümantasyonumu bu şekilde yapmaya başladım. Tam bir SSS değil, daha çok SO soruları gibi. yani nasıl yaparım? veya bu nedir?
Paul Duer

23

Deneyin:

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

Bu, izinlere sahip olduğunuzu varsayarak, "yol" altındaki tüm dosya ve klasörleri özyinelemeli olarak siler.





3

Bunu dene.

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 ile karşılaşanlarınız için şu denetimi ekleyin:

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);
    }
}

0

Bunu dene:

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.

Bu kod soruyu yanıtlayabilirken, sorunun nasıl ve / veya neden çözüldüğüne ilişkin ek bağlam sağlamak, yanıtlayanın uzun vadeli değerini artıracaktır. Bunu oku
Shanteshwar Inde
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.