簡體   English   中英

清空目錄的最佳方法是什么?

[英]What is the best way to empty a directory?

有沒有一種方法可以刪除指定目錄的所有文件和子目錄,而無需對其進行遍歷?

非優雅的解決方案:

public static void EmptyDirectory(string path)
{
    if (Directory.Exists(path))
    {
        // Delete all files
        foreach (var file in Directory.GetFiles(path))
        {
            File.Delete(file);
        }

        // Delete all folders
        foreach (var directory in Directory.GetDirectories(path))
        {
            Directory.Delete(directory, true);
        }
    }
}

System.IO.Directory.Delete怎么樣? 它有一個遞歸選項,您甚至在使用它。 查看您的代碼,看起來您正在嘗試做一些稍有不同的操作-清空目錄而不刪除它,對嗎? 好吧,您可以刪除它並重新創建它:)


無論如何,您(或您使用的某些方法)必須遍歷所有文件和子目錄。 但是,您可以使用GetFileSystemInfos同時遍歷文件和目錄:

foreach(System.IO.FileSystemInfo fsi in 
    new System.IO.DirectoryInfo(path).GetFileSystemInfos())
{
    if (fsi is System.IO.DirectoryInfo)
        ((System.IO.DirectoryInfo)fsi).Delete(true);
    else
        fsi.Delete();
}

為什么那不優雅? 它很干凈,可讀性很強。

好吧,您始終可以只使用Directory.Delete...。

http://msdn.microsoft.com/zh-CN/library/aa328748%28VS.71%29.aspx

或者,如果您想花哨的話,請使用WMI刪除目錄。

這是一個基於OP原始代碼的擴展方法,我認為這是很好的方法,比其他選項更具可讀性。

我同意在框架中使用單個方法刪除目錄的內容而不刪除目錄會很好,但是我認為這是下一件好事。

using System;
using System.IO;

namespace YourNamespace
{
    public static class DirectoryInfoExtensions
    {
        public static void EmptyDirectory(this DirectoryInfo di)
        {
            if (di.Exists)
            {
                foreach (var file in di.GetFiles())
                {
                    file.Delete();
                }

                foreach (var directory in di.GetDirectories())
                {
                    directory.Delete(true);
                }
            }
        }
    }
}

暫無
暫無

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

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