LINQ günümüzde genellikle veritabanı ile etkin şekilde kullanılmaktadır. İleride veritabanında linq kullanımı ile ilgili pek çok konu işleyeceğiz. Ama şimdilik veritabanına hiç bulaşmadan şimdiye kadar klasik kullandığımız işlemlerde linq kullanımı hakkında çalışacağız. Bu makalemizin konusunda ise dosya işlemleri var.
Bu işleyeceğimiz örneklerin linq kullanmadan daha rahat ve daha hızlı yapılabileceğini biliyoruz. Fakat amacımız linq ile tanışmak olduğu için mümkün olduğunca işlemleri linq ile yapmaya ve yaptırmaya gayret ediyorum. Bu sayede zaten yapabildiğimiz işlerin aslında linq da nasıl aksettiğini görebileceğiz.
Lafı fazla uzatmaya gerek yok. Hemen kodlamaya geçelim :)
Öncelikle yeni bir WindowsApplication oluşturuyoruz. Bir Button ve bir DataGridView ekliyoruz forma.
button1 click olayında GetFiles fonksiyonunu sabit olarak kullanacağız. Örneklerimizde ise GetFiles fonksiyonunu geliştireceğiz.
private void button1_Click(object sender, EventArgs e)
{
GetFiles("C:\\");
}
Ben C:\ rootu seçtim siz istediğiniz dizin üzerinde çalışabilirsiniz.
İlk olarak dosya listesini harf sırasına göre gride dolduruyoruz:
private void GetFiles(string pPath)
{
var mFiles = from f in new DirectoryInfo(pPath).GetFiles()
orderby f.Name
select f;
dataGridView1.DataSource = mFiles.ToList();
}
Gördüğümüz gibi gridin içinde dosyaya ilişkin tüm bilgiler bulunmaktadır. Bu bilgilerin hepsini gridde görmeye gerek yok. Biz sadece Dosya adı, boyutu (Byte olarak) ve özelliklerini(attributes) görmek istiyoruz:
private void GetFiles(string pPath)
{
var mFiles = from f in new DirectoryInfo(pPath).GetFiles()
orderby f.Name
select new { Ad = f.Name, Boyut = f.Length, Attr = f.Attributes };
dataGridView1.DataSource = mFiles.ToList();
}
Şimdi arşiv dosyalarını seçelim:
private void GetFiles(string pPath)
{
var mFiles = from f in new DirectoryInfo(pPath).GetFiles()
where (f.Attributes & FileAttributes.Archive) != 0
orderby f.Name
select new { Ad = f.Name, Boyut = f.Length, Attr = f.Attributes };
dataGridView1.DataSource = mFiles.ToList();
}
Bu arşiv dosyaları içinden boyutu 1024 byte ten büyük olanları listeleyelim:
private void GetFiles(string pPath)
{
var mFiles = from f in new DirectoryInfo(pPath).GetFiles()
where (f.Attributes & FileAttributes.Archive) != 0
&& f.Length>1024
orderby f.Name
select new { Ad = f.Name, Boyut = f.Length, Attr = f.Attributes };
dataGridView1.DataSource = mFiles.ToList();
}
Evet gördüğümüz gibi örnekleri daha da çoğaltabiliriz. Bu örneklerin benzerlerini merhaba dünya (bir önceki makale) de işlemiştik. Şimdi ise birazdaha farklı linq örneklerini inceleyelim. Bunun için dosyalar değilde dizinler üzerinde çalışmaya başlayalım. Dizinlerin listesi:
private void GetFolders(string pPath)
{
var mFolders = from f in new DirectoryInfo(pPath).GetDirectories()
orderby f.Name
select f;
dataGridView1.DataSource = mFolders.ToList();
}
Şimdi bu dizinlere bağlı dosyaların toplam boyutlarını gösterelim:
private void GetFolders(string pPath)
{
var mFolders = from f in new DirectoryInfo(pPath).GetDirectories()
orderby f.Name
select new { Ad = f.Name,
Attr = f.Attributes ,
Boyut=(from ff in new DirectoryInfo(f.FullName).GetFiles() select ff.Length).Sum()
};
dataGridView1.DataSource = mFolders.ToList();
}
Şimdide yukarıdaki bilgilere ek olarak dizinlerin içlerindeki dosya ve dizin sayılarını gösterelim:
private void GetFolders(string pPath)
{
var mFolders = from f in new DirectoryInfo(pPath).GetDirectories()
orderby f.Name
select new { Ad = f.Name,
Attr = f.Attributes ,
Boyut=(from ff in new DirectoryInfo(f.FullName).GetFiles() select ff.Length).Sum() ,
DosyaSayisi=(from ff in new DirectoryInfo(f.FullName).GetFiles() select ff).Count() ,
DizinSayisi = (from ff in new DirectoryInfo(f.FullName).GetDirectories() select ff).Count()
};
dataGridView1.DataSource = mFolders.ToList();
}
Çalıştırdığımız zaman ise programın çıktısı şu şekilde olacak:
Şimdilik bu kadar örnek yeterli bence. Baştanda söylediğim gibi bu makaledeki amacımız dizinleri yada dosyaları listeletmek değil, bu işlemleri linq ile yaptırmaktı. Listeleme, boyutlarının hesaplanması gibi işlemlerde belki linq kullanmaya gerek kalmayabilir. Ama konunun basitliği açısından zaten yaptırabildiğimiz bir işi birde linq ile yaptırmanın yollarını incelemiş olduk.
Selam ve saygılarımla,
Gökhan Köseoğlu
Bu yazıyı ilk değerlendiren siz olun
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5