İlginizi Çekebilir
  1. Ana Sayfa
  2. C Sharp

C# Klasördeki Dosya Adlarını Almak

C# Klasördeki Dosya Adlarını Almak
C# Klasördeki Dosya Adlarını Almak
+ - 0

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;

C# get file in folder

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.

C# Klasördeki Dosya Adlarını Almak

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.

C# Klasördeki Dosya Adlarını Almak

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. ?

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)