C # menghapus folder dan semua file dan folder di dalam folder itu

104

Saya mencoba menghapus folder dan semua file dan folder di dalam folder itu, saya menggunakan kode di bawah ini dan saya mendapatkan kesalahan Folder is not empty, ada saran tentang apa yang dapat saya lakukan?

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

Jawaban:

167
dir.Delete(true); // true => recursive delete
Tommy Carlier
sumber
111

Baca Manual:

Metode Directory.Delete (String, Boolean)

Directory.Delete(folderPath, true);
Morfildur
sumber
68
Mengapa membaca manual ketika lebih cepat google dan berakhir di sini?
reggaeguitar
5
Ini sangat benar
Corvin
4
Memang ... hanya googled ini, dan posting ini adalah hasil pertama dari google.
MasterN8
2
Yang terkadang saya lakukan adalah mengajukan pertanyaan dan menjawabnya sendiri, untuk membantu calon karyawan Google. StackOverflow memungkinkan Anda memposting pertanyaan dan jawaban secara bersamaan.
DharmaTurtle
1
Saya sudah mulai melakukan semua dokumentasi lokal saya dengan cara ini. Bukan FAQ, lebih seperti pertanyaan SO. yaitu Bagaimana saya? atau Apa ini?
Paul Duer
23

Mencoba:

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

Ini akan secara rekursif menghapus semua file dan folder di bawah "jalur" dengan asumsi Anda memiliki izin untuk melakukannya.

jinsungy
sumber
6

Err, bagaimana kalau menelepon Directory.Delete(path, true);?

Dmitri Nesteruk
sumber
5

The Directory.Delete metode memiliki parameter boolean rekursif, harus melakukan apa yang Anda butuhkan

Paolo Tedesco
sumber
4

Kamu harus menggunakan:

dir.Delete(true);

untuk menghapus konten folder itu juga secara rekursif. Lihat kelebihan beban MSDN DirectoryInfo.Delete () .

pyrocumulus
sumber
3

Coba ini.

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");
        }
    }
}
Rosidin Bima
sumber
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
sumber
0

Coba ini:

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.
Pangeran
sumber
Meskipun kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang bagaimana dan / atau mengapa kode ini memecahkan masalah akan meningkatkan nilai jangka panjang jawaban. Baca ini
Shanteshwar Inde
0

Bagi Anda yang mengalami DirectoryNotFoundException, tambahkan pemeriksaan ini:

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