C # ลบโฟลเดอร์และไฟล์และโฟลเดอร์ทั้งหมดในโฟลเดอร์นั้น


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

คำตอบ:



112

อ่านคู่มือ:

Directory.Delete วิธีการ (สตริงบูลีน)

Directory.Delete(folderPath, true);

68
ทำไมต้องอ่านคู่มือในเมื่อ google มันเร็วกว่ามากและจบลงที่นี่?
reggaeguitar

5
นี่เป็นเรื่องจริง
Corvin

4
อันที่จริง ... แค่ googled สิ่งนี้และโพสต์นี้เป็นผลลัพธ์แรกจาก google
MasterN8

2
บางครั้งสิ่งที่ฉันทำคือถามคำถามแล้วตอบด้วยตัวเองเพื่อช่วยเหลือชาว Google ในอนาคต StackOverflow ช่วยให้คุณสามารถโพสต์คำถามและคำตอบได้พร้อมกัน
DharmaTurtle

1
ฉันเริ่มทำเอกสารในเครื่องทั้งหมดด้วยวิธีนี้ ไม่ใช่คำถามที่พบบ่อยเหมือนคำถาม SO เช่นฉันจะทำอย่างไร? หรือนี่คืออะไร?
Paul Duer

23

ลอง:

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

การดำเนินการนี้จะลบไฟล์และโฟลเดอร์ทั้งหมดซ้ำ ๆ ภายใต้ "เส้นทาง" โดยสมมติว่าคุณมีสิทธิ์ในการดำเนินการดังกล่าว





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

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.