Blog
.NET Basit Çözümler – Bir Dizindeki Tüm Dosyaları ve Alt Dizinlerin Sayısını Almak
Merhabalar;
Sahada yaptığımız bir otomasyon uygulamasında etiket formatlarını yazdırdıktan sonra yazdırılan her etiketin prn dosyasınıda kayıt altına almamız gerekti.
Fakat belirli adete ulaştıklarında da bu formatları başka bir yere göndermeliydik, bu nedenle dizin içerisindeki dosya sayılarını almamız gerekiyordu. Kaynaklar sıkıntılı olduğu için az kaynakla hızlı bir çözüm gerekliydi, çünkü günlük binlerce yeni dosya kaydından bahsediyoruz.
Bunun için aşağıdaki gibi farklı çözümler var fakat kaynak harcamakta üstlerine yok.
var rootDir = Directory.GetDirectories(@"C:\Etiketler");
foreach (var dir in rootDir)
{
if (Directory.GetDirectories(dir).Length > 0)
{
}
}
Bende aşağıdaki bir çözümler az kaynak çok iş diyebileceğimiz bir yöntem buldum.
Directory.GetFiles(WorkingDir, "*", SearchOption.AllDirectories);
Daha da az kaynak istiyorum; Bunun için çözümde aşağıda
int result = Directory.EnumerateFiles(WorkingDir, "*", SearchOption.AllDirectories).Count();
Eline sağlık
GetFiles, tüm dizinleri bulup bir listeye alırken (list add); EnumerateFiles her dosya bulundukça bağlanan işlemi yapar (yield return).
Burada iteratöre sayma işlemi bağlanmıştır. Dolayısıyla ilk metot geriye büyükçe bir dosya dizisi dönecek akabinde bu dizinin boyutu alınacaktır. İkinci durumda ise her dosya bulundukça gizli bir “adet” değişkeni bir arttırılacak ve sıradaki değere geçerken mevcut dosya değeri çöpe atılacaktır. Bellekten ve işlemciden büyük tasarruf var.