C # xóa một thư mục và tất cả các tệp và thư mục trong thư mục đó


104

Tôi đang cố gắng xóa một thư mục và tất cả các tệp và thư mục trong thư mục đó, tôi đang sử dụng mã bên dưới và tôi gặp lỗi Folder is not empty, bất kỳ đề xuất nào về những gì tôi có thể làm?

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âu trả lời:



110

Đọc Sách hướng dẫn:

Phương thức Directory.Delete (Chuỗi, Boolean)

Directory.Delete(folderPath, true);

68
Tại sao phải đọc hướng dẫn sử dụng khi google nó nhanh hơn nhiều và kết thúc ở đây?
reggaeguitar

5
Điều này rất đúng
Corvin

4
Thật vậy ... chỉ cần googled này, và bài đăng này là kết quả đầu tiên từ google.
MasterN8

2
Những gì tôi làm đôi khi là đặt câu hỏi và sau đó tự trả lời câu hỏi đó, để giúp những người tìm kiếm google trong tương lai. StackOverflow cho phép bạn đăng câu hỏi và câu trả lời đồng thời.
DharmaTurtle

1
Tôi đã bắt đầu làm tất cả các tài liệu địa phương của mình theo cách này. Không hoàn toàn là một câu hỏi thường gặp, giống như câu hỏi SO hơn. tức là Làm thế nào để tôi? hoặc Đây là gì?
Paul Duer

23

Thử:

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

Thao tác này sẽ xóa đệ quy tất cả các tệp và thư mục bên dưới "đường dẫn" giả sử bạn có quyền làm như vậy.





3

Thử cái này.

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

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

Thử cái này:

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.

Mặc dù mã này có thể trả lời câu hỏi, nhưng việc cung cấp thêm ngữ cảnh về cách và / hoặc lý do tại sao nó giải quyết vấn đề sẽ cải thiện giá trị lâu dài của câu trả lời. Đọc cái này
Shanteshwar Inde

0

Đối với những người bạn đang chạy vào DirectoryNotFoundException, hãy thêm kiểm tra này:

if (Directory.Exists(path)) Directory.Delete(path, true);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.