簡體   English   中英

遞歸刪除 C# 中的文件和目錄

[英]Recursive delete of files and directories in C#

如何在 C# 中遞歸刪除給定目錄? 包含文件的目錄。

System.IO.Directory.Delete與第二個參數true是否可以解決問題?


編輯:

所以,我實際上確實回答了我自己的問題,盡管這里的答案更加清晰。 我首先提出這個問題的原因是,恰好調用Delete (第二個參數設置為true )的代碼沒有做它應該做的事情。 事實證明,其原因是在目錄層次結構中的某個位置設置了RO屬性,而波蘭語版本的Windows XP正在為此拋出一個非常奇怪的消息。

如果子目錄還包含文件,唯一對我有用的解決方案是使用遞歸函數:

    public static void RecursiveDelete(DirectoryInfo baseDir)
    {
        if (!baseDir.Exists)
            return;

        foreach (var dir in baseDir.EnumerateDirectories())
        {
            RecursiveDelete(dir);
        }
        baseDir.Delete(true);
    }

看起來 Directory.Delete(dir, true) 只刪除當前目錄的文件,如果它們是空的子目錄。

希望它可以幫助某人。

順便說一句,例如: RecursiveDelete( new DirectoryInfo(@"C:\\my_dir") );

是的,這就是該參數的重點。 您是否嘗試過並遇到任何問題? (我剛剛仔細檢查過,它對我來說很好用。)

如果您收到 UnauthorizedAccessException 。 您可以使用Jone PolvoraRecursiveDelete 的修改。 謝謝你的想法。 我會用的。

    public static void RecursiveDelete(DirectoryInfo baseDir)
    {
        if (!baseDir.Exists)
            return;

        foreach (var dir in baseDir.EnumerateDirectories())
        {
            RecursiveDelete(dir);
        }
        var files = baseDir.GetFiles();
        foreach (var file in files)
        {
            file.IsReadOnly = false;
            file.Delete();
        }
        baseDir.Delete();
    }

遞歸適用於文件和文件夾(奇怪的是,我認為它不適用於文件;我的壞...):

// create some nested folders...
Directory.CreateDirectory(@"c:\foo");
Directory.CreateDirectory(@"c:\foo\bar");
// ...with files...
File.WriteAllText(@"c:\foo\blap.txt", "blup");
File.WriteAllText(@"c:\foo\bar\blip.txt", "blop");
// ...and delete them
Directory.Delete(@"c:\foo", true); // fine

來自@StayOnTarget 的修改解決方案,因此不會刪除根目錄:

public static void RecursiveDelete(DirectoryInfo baseDir, bool isRootDir)
{
    if (!baseDir.Exists)
        return;
    foreach (var dir in baseDir.EnumerateDirectories()) RecursiveDelete(dir, false);
    foreach (var file in baseDir.GetFiles())
    {
        file.IsReadOnly = false;
        file.Delete();
    }
    if (!isRootDir) baseDir.Delete();
}

為什么不使用?

Directory.Delete(directoryPath, true);

https://msdn.microsoft.com/en-us/library/fxeahc5f(v=vs.110).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM