SORU
16 NİSAN 2009, PERŞEMBE


Eğer klasör boş ise hızlı bir şekilde kontrol etmek için nasıl.NET)?

Eğer disk üzerinde dizin boş olup olmadığını kontrol edin. Herhangi bir klasör/dosya içermiyor anlamına gelir. Ben basit bir yöntem yoktur. Biz FileSystemİnfo bu dizi almak ve eğer elemanların sayısı sıfıra eşit olup olmadığını kontrol edin. Böyle bir şey:

    public static bool CheckFolderEmpty(string path)
    {
        if (string.IsNullOrEmpty(path))
        {
            throw new ArgumentNullException("path");
        }

        var folder = new DirectoryInfo(path);
        if (folder.Exists)
        {
            return folder.GetFileSystemInfos().Length == 0;
        }

        throw new DirectoryNotFoundException();
    }

Bu yaklaşım iyi görünüyor. AMA!! Var, performans açısından çok çok kötü.() GetFileSystemİnfosçok zor bir yöntemdir. Aslında, klasörün tüm dosya sistemi nesneleri sıralar, bütün mallarını alır, nesneleri oluşturur, yazılan dizi vb doldurur. Ve tüm bu sadece Uzunluğu kontrol etmek için. Bu aptalca, değil mi?

Ben sadece bu kod ve bu yöntemin ~250 aramalar ~500ms içinde yürütülen kararlı, profilli. Bu çok daha hızlı yapmak mümkün olduğunu çok yavaş ve inanıyorum.

Herhangi bir öneriniz var mı?

CEVAP
5 HAZİRAN 2009, Cuma


Dizinde yeni bir özellik ve Directoryınfo var .NET 4 dizi yerine bir IEnumerable dönmek için izin verir, ve tüm dizin içeriğini okumadan önce sonuçlar dönen başlar.

See here there

public bool IsDirectoryEmpty(string path)
{
    IEnumerable<string> items = Directory.EnumerateFileSystemEntries(path);
    using (IEnumerator<string> en = items.GetEnumerator())
    {
        return !en.MoveNext();
    }
}

EDİT: tekrar cevap görünce, bu kod çok daha kolay yapılabilir farkındayım...

public bool IsDirectoryEmpty(string path)
{
    return !Directory.EnumerateFileSystemEntries(path).Any();
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • A Alkhaldi

    A Alkhaldi

    12 Mayıs 2007
  • BuzzFeedVideo

    BuzzFeedVide

    10 AĞUSTOS 2011
  • TheFlightsuit

    TheFlightsui

    22 HAZİRAN 2009