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