Herkese selam! C# Dosya Oluşturma Okuma ve Yazma İşlemleri yazım ile C# eğitim setime devam ediyorum. Bu yazımda bir metin belgesi oluşturma okuma ve yazmaya dair bir çok şey bulabilirsiniz. Aslında sadece oluşturma, okuma ve yazma değil bir projede olması gerektiği gibi düşündüğüm şekilde anlatmaya çalıştım. Kaydetme yaparken, dosyanın yok ise oluşturulması, var ise tercihen üzerine yazılması yada devamına eklenmesi ve dosyanın içeriğinin okumasına kadar olması gereken işlemlere yer verdim. Ve bittabi bu konu da github’da yerini aldı. Ancak bunu yeni bir proje olarak değil dersler projesi olarak 2018 de açtığım projenin içerisine ekledim.
1C# Dosya Oluşturma Okuma ve Yazma İşlemleri
Bu konuyu anlatırken, direk bu konuya odaklı olarak anlatmadım. Bir proje içerisinde kullanılması gerektiği şekilde hazırladım. Elbette bu herkese uymayacaktır. Sonuçta her proje aynı amacı gütmeyeceği için farklı yaklaşımlar gerekecektir. Ancak yine de size fikir verebilir.
Bir textbox’a yazdıklarımızı savefiledialog ile bir yer seçip kaydedeceğiz. Eğer yeni bir dosya ise create edeceğiz. Zaten var olan bir dosya ise üzerine yazabilecek, tercihen de dosyaya yazmak istediklerimizi seçtiğimiz dosyanın içerisine en alta ekleyeceğiz. Başka bir yerden ise openfiledialog ile dosyamızı seçip içeriğini okuyup bir textbox’a yazacağız.
Arkadaşlar, sitemde 300+ yazı olduğundan dolayı, dersleri eklerken eski yazılarıma linkler veriyorum. Mesela bu yazımda bir paragrafta 4 bağlantı var. Bağlantılara tıkladığınızda bağlantıyı içeren ifadeler ile ilgili yazılara gidersiniz. Bu linkleri incelemenizi tavsiye ederim.Hazırladığım uygulamanın tasarımı aşağıdaki gibidir.
Öncelike projemize gerekli olan namespace’i ekliyoruz.
using System.IO;
Şimdi bu işlemi yapabilmek için iki metot hazırlayacağız. Biri Metin_Oku(); diğeri Metin_Yaz();
1 C# Dosya Okuma İşlemleri
private void btn_oku_Click(object sender, EventArgs e) { Metin_Oku(); } void Metin_Oku() { OpenFileDialog file = new OpenFileDialog(); file.Filter = "txt Dosyaları (*.txt)|*.txt|Tüm Dosyalar(*.*)|*.*"; file.FilterIndex = 2; file.RestoreDirectory = true; file.CheckFileExists = false; file.Title = "Metin Dosyası Seçiniz.."; if (file.ShowDialog() == DialogResult.OK) { StreamReader Kayit = new StreamReader(file.FileName); txt_okunan_metin.Text = Kayit.ReadToEnd(); Kayit.Close(); } }
Burada OpenFileDialog kullanarak okumak istediğimiz dosyayı seçiyoruz. Eğer açılan dialog penceresinde OK – TAMAM butonuna tıklandıysa işleme devam ediyoruz ve StreamReader sınıfını kullanarak, seçtiğimiz dosyanın yolunu kullanarak dosyaya ulaşıyor ve içeriğini okuyoruz. Okuduğumuz metni, textbox’a yazdıktan sonra StreamReader’i kapatıyoruz. Eğer bu StreamReader kapatmazsak, bağlantısı açık kalacağından bir daha bu dosya ile çalışmak istediğimizde dosya zaten kullanıyor hatası alırız.
NOT 1: Türkçe karakter okumada sorun yaşıyorsanız C# StreamReader Türkçe Karakter Sorunu Çözümü yazıma göz atabilirsiniz.
NOT 2: Sürükle Bırak yaparak dosya okuma işlemi için C# Drag Drop İle Dosya Okuma – Sürükle Bırak yazıma göz atabilirsiniz.
2 C# Dosya Oluşturma ve Yazma İşlemleri
Şimdi Dosya oluşturma ve Yazma işlemine geçelim.
Burada ilk olarak en basit haliyle dosya oluşturmayı ayrıca vermek istiyorum. Aşağıdaki kod dosyanı var olup olmadığını kontrol eder. Eğer dosya yok ise dosyayı create eder.
void Dosya_Olustur(string dosya_full_yol) { // dosya_full_yol = C:\\MetinBelgei\Yeni Metin Belgesi.txt if (!File.Exists(dosya_full_yol))// = if (File.Exists(dosya_full_yol) == false) { File.Create(dosya_full_yol); } }
Bunu neden ayrıca verdiğimi birazdan göreceksiniz. Çünkü Dosya create etmek için yukarıdaki kodlar kullanmayacağız.
void Metin_Yaz(string text) { SaveFileDialog save = new SaveFileDialog(); save.CreatePrompt = true; // dosya yoksa üret save.OverwritePrompt = true; // üzerine yazma uyarısı save.Title = "Metin Dosyaları"; save.DefaultExt = "txt"; save.Filter = "txt Dosyaları (*.txt)|*.txt|Tüm Dosyalar(*.*)|*.*"; if (save.ShowDialog() == DialogResult.OK) { if (chk_altina_ekle.CheckState == CheckState.Checked) { // Burada AppandText metodunu kullanmak için FileStream kullandık. Bunun amacı farklı yöntemleri görmenizi istememdir. FileStream fs = new FileStream(save.FileName, FileMode.OpenOrCreate, FileAccess.Write); fs.Close(); File.AppendAllText(save.FileName, Environment.NewLine + txt_yazilacak_metin.Text); } else { if (File.Exists(save.FileName)) { StreamReader Oku = new StreamReader(save.FileName); string okunan = Oku.ReadToEnd(); Oku.Close(); if (okunan.Trim() != string.Empty) { switch (MessageBox.Show("Seçtiğiniz belge boş değil. Üzerine yazmak istiyorsanız -EVET-, ekrana getirmek istiyorsanız -HAYIR-, işlemi iptal etmek istiyorsanız -VAZGEÇ-'i seçin" , "İşlem Seçin", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)) { case DialogResult.Cancel: break; case DialogResult.Yes: StreamWriter Kayit = new StreamWriter(save.FileName); Kayit.WriteLine(text); Kayit.Close(); break; case DialogResult.No: txt_yazilacak_metin.Text = okunan; break; } } } else { StreamWriter Kayit = new StreamWriter(save.FileName); Kayit.WriteLine(text); Kayit.Close(); } } } }
Kodları açıklamak gerekirse;
- Bir dosya kaydetmek istediğimiz için SaveFileDialog kullanıyoruz.
- CreatePrompt özelliği ile Dosya Adı kısmına yazdığımız dosya seçilen yolda yok ise “Dosya mevut değil oluşturulsun mu?” şeklinde bir soru sormasını sağlıyor
- Özellik True olduğundan aşağıdaki gibi bir uyarı çıkacak.
- OverwritePrompt ise üzerine yazma sorusunu sormayı sağlar.
- Özellik False olduğundan uyarı çıkmayacak.
- Burada bu uyarının çıkmasını istemiyoruz çünkü bu olayı biz yöneteceğiz.
- Eğer açılan dialog ekranında OK – TAMAM butonuna tıklanmış ise işlemlere devam edeceğiz.
3 C# Dosya Yazma
Burada ilk olarak iki seçeneğimiz var. Eğer Altına Yaz checkBox’u işaretlemiş isek, farklı bir yönteme gidiyoruz ve FileStream sınıfının AppendText metodu ile kısa yoldan dosyaya yazmak istediklerimizi mevcut dosyanın altına yazıyoruz. Bu seçenek işaretli iken de yeni dosya üretilebilir. FileStream sınıfını kullanırken OpenOrCreate dosya modu ile yazma girişiminde bulunduğumuzdan dolayı varsa dosyayı aç yoksa oluştur demiş oluyoruz. Bunu kullanmamın amacı farklı yöntemler kullanmaya çalışmaktır.
Eğer Altına Yaz checkBox’u işaretlememiş isek bir takım kontroller ve farklı işlem yollarına gidiyoruz. Önce seçili olan dosya var mı yok mu diye kontrol ediyoruz. Eğer dosya mevcut değil ise yeni bir dosya oluşturup yazmak istediklerimizi yazıyoruz. Dikkat ederseniz burada file create ile ilgili bir kod yok. SaveFileDialog’un kullanım amacı dosya kaydetmek olduğundan SaveFileDialog bunu yapıyor.
Seçtiğimiz yada isim verdiğimiz dosya mevcut ise, ilk olarak mevcut dosyayı okuyoruz. Eğer içerisinde bir şeyler yazıyor ise bir uyarı çıkarıyoruz.
Burada MessageBox’u switch içerisinde kullanıyoruz. MessageBox sınıfı geri dönüş olarak DialogResult türünde değer döndüğü için bunu switch içerisinde de kullanabilirsiniz.
Çıkan MessageBox’ta kullanıcı Vazgeç dedi ise hiçbir işlem yapmıyoruz. Evet dedi ise üzerine yazma işlemini yapıyoruz. Hayır dedi ise okunan değeri textbox’a yazıyoruz. Böylece kullanıcı mevcutta var olan verisini kaybetmeden altına devam edebilecek.
C# Dosya Oluşturma Okuma ve Yazma İşlemleri yazımda bu kadar arkadaşlar. Dediğim gibi bu yazıdaki kodlar da dersler projemde 40. numaralı klasör içerisinde yer almaktadır. Diğer yazılarımda görüşmek üzere. Umarım faydalı olmuştur. Aşağıdaki linklerden eğitim seti sayfasına ve github projesine ulaşabilirsiniz.
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…
Sağlıcakla ve kodla kalın….
Merhaba.
chk_altina_ekle kısmını anlamadım
Merhaba,
Aslında o kısma bir yorum satırı bırakmıştım anlaşılması için. İki farklı yöntemi göstermek amacı ile yaptığım bir işlemdir. Tabi yine de farklı işlemlerdir.
Altına ekleme = seçilen dosyada var olan metnin, alt kısmına eklemeye devam etmesidir.
Bu seçili olmaz ise, sol kısımda yazılı olanlar, mevcut dosyanın üzerine yazılacaktır.