2012-05-19 23 views
5

Programımın bir disk sürücüsündeki dosya sayısını sayması gerekiyor.Bir sürücüdeki dosya sayısını sayma

Bunu yapmanın en hızlı yolu nedir?

Directory.GetFiles() çok yavaş olduğu için bir alternatif değildir.

+0

yönetici haklarına ihtiyaç? Bir yolu olmalı, NTFS günlüğümüz var, WMI'mız var ve bu yüzden lol var. – animaonline

+3

Bu bir _comment_ soru, cevap değil. Ve sadece "GetFiles" in yavaş olduğunu söylüyorsunuz. Hızlı nedir, tanımında? Soru, detaylardan yoksun. NTFS günlüğünüz varsa – Oded

+0

, o zaman Directory.GetFiles() başlangıçta yapmak ve daha sonra günlük bakım sayacı kullanmak mümkündür. – volody

cevap

2

kernel32.dll'u içe aktarmayı denediniz mi?

Burada yayınlanmış iyi bir uygulama örneği var: https://stackoverflow.com/a/724184/912851. Bakmaya değer olabilir.

Düzenleme: Hayatımda gördüğüm en hızlı bir this application olduğunu. Ntfs dergilerini kullanır. ve birkaç saniye içinde sabit diskimde milyonlarca dosya listeliyor. Sanırım C++ veya c üzerinde bir sdk ve kaynakları var. Belki yönetilen bir dll oluşturabilir ve C# üzerinde kullanabilirsiniz?

+0

Evet, bunu da denedim, gerçekten yavaş. Ama teşekkürler – animaonline

+1

Ben de 42k dosyaları ile dizin ağacında her iki yöntemi karşılaştırmak için küçük bir kod yaptım merak ediyorum: GetFiles = 1.2seconds, bu yöntem = 650ms. Yani zaten 2x daha hızlı ... Oded zaten yukarıda yazdığı gibi, IO yavaş, yüz binlerce dosya için anında sonuç elde edemezsiniz ... – Fabske

0
Func<string, int> files = null; 
files = p => Directory.GetFiles(p).Length() + Directory.GetDirectories(p).Select(p1 => files(p1)); 

int count = files(@"c:\"); 

Horrible ama linqy!

+0

Directory.GetFiles() bir alternatif değil ^^ – animaonline

+0

Bu nasıl OP soruyor _slowness_ sorunu ele alıyor? – Oded

+0

Korkunç, GetFiles kullanın ve ... derleme yapmıyor: p – Fabske

0

Eğer sürücü USN günlüğü dışarı okuyabilir, bu çok hızlıdır ancak

o bir cevap ne biçim
+0

Ben de FAT dosya sistemlerinde çalışan bir çözüme ihtiyacım var. – animaonline

İlgili konular