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
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.
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();
}
Eğer bir kayıt varsa düzgün bir şekild...
Nasıl eğer bir klasör olup olmadığını ...
Bir şekilde eğer bir dosyanın kullanım...
Nasıl eğer bir sayı 2 Bir güç olduğunu...
Neden eğer sözlük anahtarı varsa kontr...