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

C# Dosya Adları Değiştirme Projesi

C# Dosya Adları Değiştirme Projesi
+ - 0

C# Dosya Adları Değiştirme Projesi , Selamlar, uzun zamandır yazı yazamıyordum. Bugün elime büyük sayıda dosyaları olan geçti. 1000+ dosyaydı. Bu dosyalar 1 – Yazı.docx şeklinde isimlendirilmiş. Tek tek bu dosyaları isimlendirmek elbette mümkün değil. Bu yüzden bende küçük bir proje hazırladım.  Bu yazımda sizlerle bu projeyi de dahil olmaz üzere paylaşmak istedim.

C# Dosya Adları Değiştirme Projesi

Elime geçen dosya isimleri şöyleydi…

  • 01 – asdasd.docx
  • 02 – as123dasd.docx
  • 03 – asdasd.docx
  • 004 – asdaasdsd.docx
  • 6 – asd123asd.docx
  • 07 – asd123asd.docx
  • 08 – a123sdasd.docx
  • 09 – asdasd.docx

Burada tek ortak nokta sayılardan sonra ayraç olarak ( – ) kullanılmış. Numaralandırmalar rastgele yapılmış. Sıralı gidiyor ama gördüğünüz şekilde birinde başta sıfır yok. Bazılarında 2 tane var.

 

Şimdi yaptığım projeye geçeyim. Önce bir ekran görüntüsü vereceğim.

c# dosya işlemleri

1 – Önce yeniden numaralandıracağımız dosyaların olduğunu klasörü seçiyoruz.

2 – ham dosyalar listeleniyor.

3 – düzeltilen dosyalar listenelenecek

4 – işlem yapılan dosyanın uzantısı yazılıyor. (göstermelik bir şey aslında)

5 – İşlenen dosyalar kopyalansın mı yoksa taşınsın mı seçiyoruz.

6 – Dosyaların isimlerinde hangi karakter ayraç olarak kullanılmış ise onu yazıyoruz.

7 – İsimlendirme işleminde sıra numarasının solunda kaç sıfır olacak onu belirtiyoruz. Örn 4 yazarsak hep 4 karakter olacaktır. 0001, 0022, 0333, 9999 şeklinde… Eğer 9999 fazla varsa 5 karakter olarak devam eder.

8 – Seçilen klasör içerisine yeni bir klasör açar. Açılacak bu klasörün adının ne olacağını yazarsınız.

9 – Butona tıkladığımızda işlem yapılır.

Aslında bu kadar özelliğe elbette gerek yoktu ama zaten amacıma 10 dk kadar sürede vardım üzerine birkaç şey daha eklemek istedim. O yüzden diğerlerini ekledim.  Şimdi projemizi açıkladığımıza göre kodları vereyim. Elbette yazının sonunda proje olarak da vereceğim. İndirip istediğiniz şekilde düzenleyebilirsiniz.

NOT: Projemde DevExpress 2016 kullandım. Size DevExpress 2016 yok ise designer sayfasını göremeyebilirsiniz.

Proje Kodlarına Geçelim

Öncelikle aşağıdaki namespace’i ekliyoruz.

using System.IO;

Yukarıdaki görselde 1 numarada olan nesne Devepxress nesnesidir ve adı ButtonEdit’tir. En sağdaki 3 nokta buton görevi görür. Bunun yeine bir textbox ile button olarak kullanabilirsiniz.

ButtonEdit, ButtonClick Evetine aşağıdaki kodları yazıyoruz.

private void buttonEdit1_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            FolderBrowserDialog fBrowser = new FolderBrowserDialog();
            fBrowser.ShowDialog();
            string secilenDizin = fBrowser.SelectedPath;
            bte_klasor_yol.Text = secilenDizin;
            list_eski_dosya_listesi.Items.Clear();
            DizinIceriginiListeyeEkle(secilenDizin, list_eski_dosya_listesi);
        }

buradaki kodları açıklamak gerekirse, bir FolderBrowser nesnesi oluşturuyoruz. Bu nesne bize bir klasör yolunu almamızı sağlıyor. Sonrasında aldığımız yolu buttonedit’in text’ine yazıyoruz. Listemizi temizliyoruz ve DizinIceriginiListeyeEkle() metodumuzu çalıştırıyoruz. Şimdi DizinIceriginiListeyeEkle() metodumuzu verelim.

 private void DizinIceriginiListeyeEkle(string dizin, ListBoxControl list)
        {
            string[] dizindekiKlasorler = Directory.GetDirectories(dizin);
            string[] dizindekiDosyalar = Directory.GetFiles(dizin);

            foreach (string dosya in dizindekiDosyalar)
            {
                FileInfo fileInfo = new FileInfo(dosya);
                string dosyaAdi = fileInfo.Name;
                list.Items.Add(dosyaAdi);
            }
        }

Bu metodumuz iki tane parametre alıyor. Birincisi seçtiğimiz dosya yolunu ve bir listboxcontrol nesnesi…

Klasördeki dosyaların isimlerini 2 numaradaki listboxcontrol nesnesine dolduruyoruz yani ham dosyaları. Aynı şekilde bu metodu, işlenen dosyaları 3 numaradaki listboxcontrol’e doldurmak içinde kullanıyoruz.

        string path = "";
        string YeniDosyaAdi = "";
        string[] DosyaAdi = new string[2];
        char ayrac = new char();
        char nokta = '.';
        FileInfo fi;

        private void btn_yeniden_sırala_Click(object sender, EventArgs e)
        {
            if (!Directory.Exists(bte_klasor_yol.Text + "\\" + txt_yeni_klasor_adi.Text))
            {
                Directory.CreateDirectory(bte_klasor_yol.Text + "\\" + txt_yeni_klasor_adi.Text);
            }

            if (txt_ayrac.Text.Trim() == string.Empty)
            {
                if (MessageBox.Show("Yeniden numaralandırma işlemi için dosya adlarında bir ayraç / seperator olmalıdır. "
                    + "Yoksa tüm dosyadı değiştirilir. " + Environment.NewLine + Environment.NewLine
                    + "EVET derseniz tüm dosya adları sadece " + txt_basamak.Text + " basamaklı sayılar olur." + Environment.NewLine
                    + "HAYIR derseniz hiçbir işlem yapılmaz."
                    , "Onay Verin", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    list_yeni_dosya_listesi.Items.Clear();
                    for (int i = 0; i < list_eski_dosya_listesi.Items.Count; i++)
                    {
                        path = bte_klasor_yol.Text + "\\" + list_eski_dosya_listesi.Items[i];
                        DosyaAdi[1] = (i + 1).ToString("d" + txt_basamak.Text + "");
                        fi = new FileInfo(path);
                        txt_uzanti.Text = fi.Extension;
                        YeniDosyaAdi = bte_klasor_yol.Text + "\\" + txt_yeni_klasor_adi.Text + "\\" + DosyaAdi[1] + fi.Extension;

                        switch (comboBoxEdit1.SelectedIndex)
                        {
                            case 0:
                                File.Copy(path, YeniDosyaAdi);
                                break;
                            case 1:
                                File.Move(path, YeniDosyaAdi);
                                break;
                        }
                    }
                    DizinIceriginiListeyeEkle(bte_klasor_yol.Text + "\\" + txt_yeni_klasor_adi.Text, list_yeni_dosya_listesi);
                }
                else { }
            }
            else
            {
                list_yeni_dosya_listesi.Items.Clear();
                for (int i = 0; i < list_eski_dosya_listesi.Items.Count; i++)
                {
                    path = bte_klasor_yol.Text + "\\" + list_eski_dosya_listesi.Items[i];
                    ayrac = Convert.ToChar(txt_ayrac.Text);
                    DosyaAdi = list_eski_dosya_listesi.Items[i].ToString().Replace(nokta, ayrac).Split(ayrac);
                    fi = new FileInfo(path);
                    txt_uzanti.Text = fi.Extension;
                    YeniDosyaAdi = bte_klasor_yol.Text + "\\" + txt_yeni_klasor_adi.Text + "\\" + (i + 1).ToString("d" + txt_basamak.Text + "") + " - " + DosyaAdi[1] + fi.Extension;

                    switch (comboBoxEdit1.SelectedIndex)
                    {
                        case 0:
                            File.Copy(path, YeniDosyaAdi);
                            break;
                        case 1:
                            File.Move(path, YeniDosyaAdi);
                            break;
                    }
                }
                DizinIceriginiListeyeEkle(bte_klasor_yol.Text + "\\" + txt_yeni_klasor_adi.Text, list_yeni_dosya_listesi);
            }
        }

Asıl işi yapan kodları geldi sıra…

İlk önce işlenmiş dosyalarımızı atacağımız yeni klasör var mı yok mu onu kontrol ediyoruz. varsa birşey yapmıyoruz. Yokse klasörü oluşturuyoruz. Burada ayraç  kısmına birşey yazılmadıysa bir uyarı veriyor. Bu uyarıya EVET cevabı verirseniz tüm dosyalar sadece numaralandırılıyor. Yani ayraç olsa da olmasada 1. listboxcontrol’deki sıraya göre işlem yapıyor. Kopyalama ya da taşıma hangisi seçildiyse ona göre işlemi yapacak.

Eğer ayraç yazıldıysa, öncelikle uzantılardan kurtulmak için tüm noktaları ayraç olarak replace ediyoruz. Sonrasında ayraçlardan parçalıyoruz.  Sıfırıncı indexte numaralar, ikinci indexte dosyaya verilen ad, üçündü indexte ise uzantı var.  Burada dosya adını alarak for döngüsünün index’i üzerinden yine dışarıdan girilen basamak sayısı kadar numaraları verip yeni adı ve uzantısı ile taşıma yada kopyalama işlemini gerçekleştiriyor.

Sonuç

Sonuç olarak böyle bir proje… Daha kısa yada daha güzel kodlarla da yazılabilir belki. Bu proje toplamda 20 dakika bile sürmeyen bir sürede bitmişti. İşimi görmüş oldu. Belki sizlerinde işine yarayabilir. Bu projeyi istediğiniz şekilde ve istediğiniz yerde özgürce kullanabilirsiniz.

Ayrıca tıklayarak GitHub üzerinden erişim sağlayabilirsiniz.


C# Dosya Adları Değiştirme Projesi, yazımızda bu kadar dostlar. Diğer derslerimizde görüşmek üzere.

C Sharp Eğitim Seti ve ERP Programlama eğitimi sayfasına gitmek için tıklayınız.

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. :)