Eğer klasör boş ise hızlı bir şekilde kontrol etmek için nasıl.NET)? | Netgez.com
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

  • 24 Канал

    24 КанаÐ

    5 ÅžUBAT 2006
  • Le Cargo !

    Le Cargo !

    24 HAZÄ°RAN 2007
  • Whizzpopping

    Whizzpopping

    10 Kasım 2005