Merhabalar, C# Klasördeki Dosya Adlarını Almak dersim ile C# eğitim setime devam ediyorum. Bu dersimizde bir klasör içerisindeki dosyaları adlarını ve bilgilerini almak konusunda farklı yaklaşımlara bakacağız. Yani birden fazla yöntem veriyor ve bunları açıklıyor olacağım.
Elbette bir çok dersimde olduğu gibi daha fazlası da olacak.
C# Klasördeki Dosya Adlarını Almak
Bir çok projemizde bu işleme ihtiyaç duyabiliyoruz. Bu dersimizde bu konunun bir kaç farklı yoluna bakacağız.
Öncelikle aşağıdaki namespace’i projemize ekliyoruz.
using System.IO;
Test adında bir klasör oluşturdum. Şöyle;
1 – Klasördeki Dosyaları Bilgileri ile Almak – TXT Dosyaları
Bu yöntemimizde bir klasördeki dosyaları tüm bilgileri ile alma konusunda bakacağız. Yani sadece klasördeki dosya adlarını değil, dosyaların içinde yazanları, dosya adı, uzantı, boyut, değiştirilme zamanı vb. gibi dosya hakkında daha fazla bilgi içeren bir dizi şeklinde almaya bakacağız.
Formumuza bir button ve iki listbox ve bir textbox (multiline) ekliyoruz. Button’a tıkladığımızda bize bir folder browser dialog penceresi açılacak ve seçtiğimiz klasördeki *.TXT uzantılı dosyaları listbox1’e ekleyeceğiz.. Listbox1’de tıkladığımız dosyanın index bilgisi ile FileInfo[] dizisindeki dosyanın diğer bilgilerine ulaşıp, bilgilerini listbox2’ye yazacağız ve içindeki bilgileride multiline yaptığımız textbox’a yazacağız.
FileInfo[] Files; private void btn_klasor_Sec_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); if (fbd.ShowDialog() == DialogResult.OK) { DirectoryInfo d = new DirectoryInfo(fbd.SelectedPath); Files = d.GetFiles("*.txt"); string str = ""; foreach (FileInfo file in Files) { listBox1.Items.Add(file.Name); } } }
Kodlarımızı incelediğimizde, bir klasörde yer alan *.TXT uzantılı dosyaları bir FileInfo[] dizisine aldıktan sonra listbox’a bu dosyaların adlarını yazdığımız görülmektedir. Buradaki dizi sayesinde, listbox1 üzerinde seçtiğimiz dosyanın diğer bilgileri başka bir listbox’a yazan kodlar yazabiliriz. Bu ilk kısımdı. Şimdi listbox1’in SelectedIndexChanged eventine gelelim ve bilgileri okduğumuz kodları yazalım.
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { int index = listBox1.SelectedIndex; listBox2.Items.Clear(); listBox2.Items.Add("Length : " + Files[index].Length); listBox2.Items.Add("LastWriteTime : " + Files[index].LastWriteTime); listBox2.Items.Add("Extension : " + Files[index].Extension); listBox2.Items.Add("LastAccessTime : " + Files[index].LastAccessTime); textBox1.Text = File.ReadAllText(Files[index].FullName); }
listbox1’de tıkladığımız dosya adının index numarasını alıyoruz ve FileInfo[] dizimizdeki bilgilerini alıyoruz. Ancak burada bir sorun var ki FileInfo sınıfı ile dosya içeriğini okuyamıyoruz. Bu yüzden dosya içeriğini okuyabilmek için File sınıfını kullanıyoruz Ancak okumak istediğimiz dosyanın tam yolunu yine FileInfo[] dizimizden alıyoruz.
Şimdi, Listbox1’den bir dosya adına tıkladığımızda listbox2’de dosya bilgileri, textbox’ta ise dosyanın içeriği yazmaktadır.
Diyelim ki bunu PDF ‘ler için yaptınız o zaman textbox yerine bir pdfviewer kullanabilirsiniz.
2 – Sadece Dosya Adlarını Almak – TXT Dosyaları
Sadece dosya adlarını almak istiyorsanız aşağıdaki kod satırı işinizi görecektir.
string[] filePaths = Directory.GetFiles(@"c:\Test\", "*.txt", SearchOption.TopDirectoryOnly);
Bu kod satırını yukarıdaki ekran tasarımımızda uygulayalım.
private void btn_klasor_Sec_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); if (fbd.ShowDialog() == DialogResult.OK) { string[] filePaths = Directory.GetFiles(fbd.SelectedPath, "*.txt", SearchOption.TopDirectoryOnly); foreach (string file in filePaths) { listBox1.Items.Add(file); } } }
Bu kodları çalıştırdığımızda listbox1’e dosyanın tam yollarının eklendiğini görebilirsiniz.
NOT: Dosya bilgilerini de okuma kodları ikinci yöntemde çalışmayacaktır çünkü FileInfo[] dizisi boş olacaktır. Ancak dosya içeriğini okuma kısmını, listbox1’deki dosya tam yolunu alarak yapabilirsiniz.
3 – Klasördeki Tüm Dosyaları Almak
Klasörlerdeki tüm dosyaları almak yani yukarıdaki senaryoya göre tüm dosyaları listbox’a eklemek için;
Files = d.GetFiles("*.txt");
satırını aşağıdaki gibi
Files = d.GetFiles();
ve
string[] filePaths = Directory.GetFiles(fbd.SelectedPath, "*.txt", SearchOption.TopDirectoryOnly);
satırını aşağıdaki gibi
string[] filePaths = Directory.GetFiles(fbd.SelectedPath, "*.*", SearchOption.TopDirectoryOnly);
şeklinde düzeltmemiz gerekmektedir. Yani satırlardaki uzantı filtrelerin kaldırıyoruz.
C# Klasördeki Dosya Adlarını Almak yazımda bu kadardı arkadaşlar. Diğer yazılarımda görüşmek üzere…
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Bu dersimde Github projemde yerini almıştır. (Ders 35)
Sağlıcakla ve takipte kalın.