Anasayfa / C# WINDOWS FORM / C# Windows Form’da Dosya İşlemleri

C# Windows Form’da Dosya İşlemleri

Yazılım geliştirmeye başladığınızda, programların verileri genellikle RAM (Rastgele Erişimli Bellek) üzerinde tuttuğunu öğrenirsiniz. Ancak RAM’deki veriler, bilgisayar kapandığında veya program sonlandırıldığında silinir. Geliştirdiğiniz bir Windows Forms uygulamasında kullanıcı ayarlarını, girilen metinleri veya hesaplama sonuçlarını kalıcı olarak saklamak isterseniz Dosya İşlemleri (File Operations) yapmanız gerekir.

Bu rehberde, C# Windows Forms kullanarak bilgisayarınızdaki dosyalara nasıl metin yazacağınızı, var olan dosyaları nasıl okuyacağınızı ve kullanıcıya profesyonel bir dosya seçme/kaydetme ekranı (OpenFileDialog ve SaveFileDialog) nasıl sunacağınızı bol örneklerle öğreneceksiniz.

1. System.IO Kütüphanesini Projeye Dahil Etmek

C# dilinde dosya okuma, yazma, oluşturma ve klasör yönetimi gibi işlemler .NET Framework’ün sunduğu System.IO (Input/Output) kütüphanesi ile gerçekleştirilir. Formunuzun arka planındaki C# kodlarını (örneğin Form1.cs) açtığınızda, en üst kısımdaki using satırlarının arasına bu kütüphaneyi mutlaka eklemelisiniz. Aksi takdirde dosya işlemi yapacağınız sınıfları bilgisayar tanımaz.

using System;
using System.Windows.Forms;
using System.IO; // Dosya işlemleri için bu satırı mutlaka ekleyin

2. Kullanıcıya Dosya Kaydettirmek: SaveFileDialog

Kullanıcıların kendi bilgisayarlarında istedikleri klasöre göz atmalarını ve oluşturdukları dosyayı istedikleri isimle kaydetmelerini sağlayan hazır iletişim kutusuna SaveFileDialog adı verilir. Bu sınıf bizzat dosya kaydetme işlemini yapmaz, sadece kaydedilecek dosyanın konumunu ve ismini belirlemenizi sağlayan profesyonel bir Windows penceresi açar.

Kullanıcıların sadece belirli formattaki (örneğin .txt) dosyaları kaydetmesini istiyorsanız Filter özelliğini kullanabilirsiniz.

Örnek Uygulama: TextBox İçeriğini Metin Belgesi Olarak Kaydetmek

Formunuzda bir adet TextBox (çok satırlı – Multiline yapılmış) ve bir adet Button (Kaydet butonu) olduğunu varsayalım. Amacımız, metin kutusuna yazılan yazıları kullanıcının seçeceği bir yere .txt formatında kaydetmektir. Kaydet butonuna çift tıklayarak şu kodları yazabiliriz:

private void btnKaydet_Click(object sender, EventArgs e)
{
    // 1. Kaydetme penceresi nesnesini oluşturuyoruz
    SaveFileDialog sfd = new SaveFileDialog();

    // 2. Sadece .txt (Metin) dosyası kaydedilebilmesi için filtre koyuyoruz
    sfd.Filter = "Metin Dosyası |*.txt| Tüm Dosyalar |*.*";
    sfd.Title = "Kayıt Yerini Seçiniz";

    // 3. Pencereyi açıyoruz ve kullanıcı "Kaydet" (OK) tuşuna bastı mı diye kontrol ediyoruz
    DialogResult cevap = sfd.ShowDialog();

    if(cevap == DialogResult.OK)
    {
        // 4. Dosya yolunu alıp StreamWriter ile yazma işlemini başlatıyoruz
        // StreamWriter metin dosyalarına karakter yazmak için kullanılır
        StreamWriter sw = new StreamWriter(sfd.FileName);

        // TextBox'ın içindeki yazıyı dosyaya yazıyoruz
        sw.Write(txtMetin.Text);

        // İşlem bitince dosyayı mutlaka kapatıyoruz
        sw.Close();

        MessageBox.Show("Dosyanız başarıyla kaydedildi!", "Bilgi");
    }
}

Bu kodu çalıştırdığınızda, profesyonel bir kayıt penceresi açıldığını ve yazdığınız metnin seçtiğiniz konuma başarıyla kaydedildiğini göreceksiniz. StreamWriter, dosya akışları oluşturarak basit bayt dizileri yerine okunaklı metinler yazmanızı sağlar.

3. Kullanıcıya Dosya Seçtirmek ve Okumak: OpenFileDialog

Kullanıcıların bilgisayarlarında veya ağdaki klasörlerinde gezinerek bir dosya seçmelerine olanak sağlayan iletişim kutusuna OpenFileDialog denir. Dosya açma pencerelerinde, kullanıcının seçtiği dosyanın yolunu almak için FileName özelliğini kullanırız.

Örnek Uygulama: Seçilen Metin Belgesini TextBox’a Aktarmak

Şimdi formumuza bir Button (Dosya Aç) ekleyelim. Amacımız kullanıcının bilgisayarından seçtiği bir metin belgesinin içeriğini okuyup, formumuzdaki TextBox içerisine yazdırmaktır.

private void btnDosyaAc_Click(object sender, EventArgs e)
{
    // 1. Dosya açma penceresi nesnesini oluşturuyoruz
    OpenFileDialog ofd = new OpenFileDialog();

    // 2. Sadece metin dosyalarını göstermesi için filtre uyguluyoruz
    ofd.Filter = "Metin Dosyaları |*.txt";
    ofd.Title = "Açılacak Metin Belgesini Seçin";

    // 3. Pencereyi gösteriyoruz ve kullanıcı bir dosya seçip Tamam'a (OK) bastıysa işleme başlıyoruz
    if(ofd.ShowDialog() == DialogResult.OK)
    {
        // 4. StreamReader ile seçilen dosyayı okuma modunda açıyoruz
        StreamReader sr = new StreamReader(ofd.FileName);

        // Dosyanın sonuna kadar tüm metni okuyup TextBox'a aktarıyoruz
        txtMetin.Text = sr.ReadToEnd();

        // Dosyayı kullanmayı bitirdiğimiz için kapatıyoruz
        sr.Close();
    }
}

4. Dosya Yollarını Yönetmek: Path Sınıfı

Dosyalarla uğraşırken genellikle dosyanın sadece adına, uzantısına veya bulunduğu klasörün adına ihtiyaç duyarsınız. C# dilinde bu işlemleri manuel olarak (metni parçalayarak) yapmak yerine System.IO kütüphanesinin içindeki Path sınıfını kullanmak en güvenli yoldur. Path sınıfının içindeki bazı faydalı metotlar şunlardır:

  • Path.GetExtension(dosyaYolu): Dosyanın uzantısını (örneğin .txt) verir.
  • Path.GetFileName(dosyaYolu): Klasör yollarını atarak sadece dosyanın adını ve uzantısını verir.
  • Path.GetDirectoryName(dosyaYolu): Dosyanın bulunduğu klasörün tam yolunu döndürür.
  • Path.GetFileNameWithoutExtension(dosyaYolu): Dosyanın uzantısı olmadan sadece ismini verir.

Örnek Kullanım:

string secilenDosya = ofd.FileName; // Örn: C:\Belgeler\notlar.txt
string sadeceIsim = Path.GetFileName(secilenDosya); // Çıktı: notlar.txt

5. Dosya İşlemlerinde Hata Ayıklama (Try-Catch)

Dosya işlemleri, yazılım dünyasında “tehlikeli” işlemler kategorisine girer. Kullanıcı bir dosyayı açmaya çalışırken dosya başka bir program (örneğin Word) tarafından kilitlenmiş olabilir, kullanıcının o klasöre okuma/yazma yetkisi olmayabilir veya dosya aniden silinmiş olabilir.

Bu gibi durumlarda, programın hata verip aniden çökmesini (kapanmasını) önlemek için dosya kodlarımızı daima try-catch blokları içerisine yazmalıyız. Dosya hatalarında genellikle Giriş/Çıkış hatası anlamına gelen IOException fırlatılır. Ayrıca, hata olsa da olmasa da açık kalan dosya bağlantılarının güvenle kapatılması için finally bloğu kullanılır.

Profesyonel Dosya Okuma Şablonu:

FileStream fs = null;
try
{
    // Dosya açma ve okuma işlemleri
    fs = new FileStream("C:\\ornek.txt", FileMode.Open);
    // ...
}
catch (IOException ioex)
{
    // Dosya ile ilgili bir hata olursa program çökmez, kullanıcı uyarılır
    MessageBox.Show("Dosya okunurken bir hata oluştu: " + ioex.Message);
}
catch (Exception ex)
{
    // Diğer genel hatalar
    MessageBox.Show("Bilinmeyen bir hata oluştu: " + ex.Message);
}
finally
{
    // Hata olsun veya olmasın, eğer dosya açılmışsa bağlantıyı kapat
    if (fs != null)
    {
        fs.Close();
    }
}

Sonuç

C# Windows Forms uygulamalarında System.IO kütüphanesini, SaveFileDialog ve OpenFileDialog nesneleriyle birleştirerek harika metin editörleri, log tutma (kayıt) sistemleri veya ayar dosyası yöneticileri yapabilirsiniz. Dosyaları okurken veya yazarken bellekte gereksiz yer kaplamaması için işlem bitiminde Close() veya Dispose() metotlarını çağırarak dosyayı kapatmayı unutmamalısınız. Öğrendiğiniz try-catch yapısını projelerinize dahil etmek ise uygulamalarınızı profesyonel, çökmeden çalışan sağlam bir yapıya kavuşturacaktır. Bol bol pratik yaparak dosya oluşturma ve okuma mantığını hızla kavrayabilirsiniz. İyi kodlamalar dileriz!

Etiketlendi:

Bir Yorum

Cevap bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

DERSLER