İçeriğe geç

Menü

Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

C# Dosya Okuma ve Yazma Nasıl Yapılır? File ve StreamWriter Örneği

csharp-dosya-okuma-yazma
Bu yazıda neler var?
  1. C# dosya okuma ve yazma nasıl yapılır?
  2. Göreli ve mutlak dosya yolları nasıl seçilir?
  3. File metotları, StreamWriter ve StreamReader arasında nasıl seçim yapılır?
  4. Not listesini dosyaya yazıp yeniden okuyan C# örneği
  5. FileNotFoundException ve IOException nasıl ele alınır?
  6. C# dosya işlemlerini nasıl pekiştirebilirsin?
  7. Sık Sorulan Sorular

C# dosya okuma ve yazma işlemleri, System.IO içindeki File, StreamWriter ve StreamReader araçlarıyla gerçekleştirilir. Metnin tamamını tek işlemde kaydetmek veya okumak için File metotları, yazma ve okuma sürecini daha ayrıntılı yönetmek için akış sınıfları kullanılabilir. Her iki yaklaşımda da dosya yolu ve olası dosya erişim hataları birlikte ele alınmalıdır.

C# dosya okuma ve yazma nasıl yapılır?

Yazma işlemi için File.WriteAllText veya StreamWriter, okuma işlemi için File.ReadAllText veya StreamReader kullanılabilir. Temel işlem sırası, hedef dosya yolunu belirlemek, metni yazmak, açık kaynağı kapatmak, dosyayı yeniden okumak ve oluşabilecek hataları uygun istisna türleriyle kontrol etmektir.

File sınıfının statik metotları, içeriğin tamamını tek seferde işlemek için kısa bir kullanım sunar. Bu metotlar dosyayı açma, işlemi tamamlama ve kapatma adımlarını kendi içinde yürütür. StreamWriter ve StreamReader ise metin akışı üzerinde yazma ve okuma yapar. Bu sınıflar using ile kullanıldığında kapsam sona ererken kaynak serbest bırakılır ve dosyanın kapatılması sağlanır.

Bu ayrım, aynı işlemin iki farklı biçimde yazılmasından ibaret değildir. File yaklaşımı bütün metin hazır olduğunda pratikken akış sınıfları satırları sırayla işlemek veya dosya açıkken birden fazla işlem yapmak için daha fazla kontrol sağlar. Makaledeki mini uygulama, dosya oluşturma, notları yazma, kaynağı kapatma, dosyayı yeniden okuma ve eksik dosyayı teşhis etme adımlarını tek bir akışta birleştirecektir.

Göreli ve mutlak dosya yolları nasıl seçilir?

Göreli ve mutlak dosya yolları nasıl seçilir?

notlar.txt bir göreli yoldur ve dosyanın konumu programın geçerli çalışma dizinine göre belirlenir. Çalışma dizini değiştiğinde aynı ifade farklı bir konumu gösterebileceği için dosyanın nereye yazıldığını kontrol etmek önemlidir. Gerekirse Environment.CurrentDirectory ile çalışma dizini görülebilir veya Path.GetFullPath("notlar.txt") ile çözümlenen tam yol elde edilebilir. Windows ortamındaki C:ProjelerNotUygulamasinotlar.txt gibi bir mutlak yol ise klasörü ve dosya adını bütünüyle belirtir.

Mutlak yol hedefi açık biçimde gösterse de kullanıcı adı, sürücü harfi veya makineye özgü bir klasör içerdiğinde kodun başka bir bilgisayarda çalışmasını zorlaştırabilir. Bu nedenle öğrenme örneklerinde sabit bir kişisel klasör yerine göreli bir yol kullanmak ve çözümlenen konumu kontrol etmek daha uygundur.

File.WriteAllText(path, content), verilen metnin tamamını dosyaya yazar ve işlem bitince dosyayı kapatır. Hedef dosya yoksa oluşturulur, varsa önceki içerik değiştirilir. File.ReadAllText(path) ise dosyanın tüm içeriğini bir metin değeri olarak okuyup dosyayı kapatır. Okunmak istenen dosya bulunamazsa FileNotFoundException oluşabilir. Yazma ve okuma sırasında aynı path değişkenini kullanmak, iki işlemin yanlışlıkla farklı dosyalara yönelmesini önlemeye yardımcı olur.

File metotları, StreamWriter ve StreamReader arasında nasıl seçim yapılır?

Seçim, metnin tamamını tek işlemde mi yoksa akış hâlinde mi işleyeceğine bağlıdır. File.WriteAllText kısa bir metni bütünüyle yazar, File.ReadAllText ise dosyanın tamamını tek bir metin olarak okur ve bu işlemlerde dosyayı kendisi açıp kapatır. StreamWriter yazma akışında WriteLine ile satır satır ilerlemeyi, StreamReader ise ReadLine ile kontrollü okumayı sağlar.

İhtiyaç Tercih Gerekçe
Kısa ve bütün metin işlemleri File.WriteAllText veya File.ReadAllText Metnin tamamını tek çağrıda yazmak veya okumak için pratiktir.
Satır satır yazma StreamWriter WriteLine ile her satırı sırayla yazabilirsin.
Kontrollü veya satır satır okuma StreamReader ReadLine ile içeriği parça parça işleyebilirsin.

using bloğu, içindeki StreamWriter veya StreamReader nesnesini kapsam sona erdiğinde Dispose eder. Böylece bağlı dosya akışının kapanması ve kaynağın serbest bırakılması için düzenli bir kapanış noktası oluşur. Blok içinde bir istisna oluşsa bile temizleme adımı korunur. Bu tablo bir üstünlük sıralaması değil, ihtiyaca göre seçim çerçevesidir.

Not listesini dosyaya yazıp yeniden okuyan C# örneği

Not listesini dosyaya yazıp yeniden okuyan C# örneği

Bu mini uygulama, göreli yoldaki notlar.txt dosyasını yazma için açar, iki notu satır satır kaydeder ve yazma bloğu bittikten sonra ayrı bir StreamReader ile içeriği yeniden okur. new StreamWriter(dosyaYolu, false) dosya varsa üzerine yazar, yoksa oluşturur. new StreamReader(dosyaYolu) okuma için açılır. FileNotFoundException, IOException sınıfından türediği için özel catch dalı genel olandan önce yazılır.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string dosyaYolu = "notlar.txt";
        string[] notlar =
        {
            "Matematik: 85",
            "Programlama: 92"
        };

        try
        {
            using (StreamWriter yazici = new StreamWriter(dosyaYolu, false))
            {
                foreach (string notMetni in notlar)
                {
                    yazici.WriteLine(notMetni);
                }
            }

            using (StreamReader okuyucu = new StreamReader(dosyaYolu))
            {
                Console.WriteLine("Dosya içeriği:");

                string satir;
                while ((satir = okuyucu.ReadLine()) != null)
                {
                    Console.WriteLine(satir);
                }
            }
        }
        catch (FileNotFoundException)
        {
            Console

FileNotFoundException ve IOException nasıl ele alınır?

Dosya işlemlerinde hata yakalamanın amacı yalnızca ham hata metnini ekrana basmak değil, sorunu çözmek için hangi kontrolün yapılacağını söylemektir. FileNotFoundException, IOException sınıfından türediği için özgül catch dalı genel daldan önce yazılmalıdır. File.ReadAllText ve dosya yolu alan StreamReader yapıcısı, hedef dosya bulunamadığında bu özel istisnayı üretebilir. StreamWriter ile yazmada hedef dosya yoksa temel kullanımda yeni dosya oluşturulabilir; eksik klasör, geçersiz yol veya erişim sorunu ise başka giriş çıkış hatalarına yol açabilir. Dosya bulunamadı. Dosya adını, uzantıyı ve çalışma klasörünü kontrol et. gibi bir mesaj, yalnızca sistemin ham metnini göstermekten daha yol göstericidir.

  1. Dosya adını ve uzantıyı kontrol et: Kodda kullanılan dosya adı ile klasördeki gerçek adın ve uzantının aynı olduğuna bak.
  2. Göreli yolun çalışma dizinini doğrula: notlar.txt gibi bir yolun hangi klasöre göre çözümlendiğini kontrol et. Gerekirse Directory.GetCurrentDirectory() ile geçerli çalışma dizinini görüntüle.
  3. Hedef klasörün ve dosyanın durumunu incele: Okumada dosyanın gerçekten bulunduğunu, yazmada ise hedef klasörün mevcut olduğunu ve erişim sorunu yaşanmadığını kontrol et.
  4. Özgül dalı genel daldan önce tut: Önce catch (FileNotFoundException) ile dosya yokluğunu, ardından catch (IOException) ile diğer giriş çıkış sorunlarını karşıla.

Bu ayrımı, try, catch ve using kullanımını pekiştirmek için C# bilgi testindeki soruları çözebilirsin.

Hata dalını doğru kurduktan sonra aynı dosya akışını küçük değişikliklerle sınamak, neden sonuç ilişkisini daha görünür hâle getirir.

C# dosya işlemlerini nasıl pekiştirebilirsin?

Mini uygulamayı tekrar çalıştırırken tek seferde birçok şeyi değiştirmek yerine her denemede bir değişkeni sınayarak ilerle. Böylece dosya oluşturma, yazma, kapatma, yeniden okuma ve hata teşhisi arasındaki ilişkiyi ayırabilirsin.

Temel C# çalışmalarını farklı başlıklarla genişletmek için ücretsiz bilgi testleri merkezini kullanarak C# ve algoritmik düşünme testlerini çözebilirsin.

  • Yeni bir not satırı ekle: Beklenen gözlem, dosya yeniden açıldığında eklediğin satırın içerikte görünmesidir.
  • Göreli yolu kontrollü biçimde değiştir: Beklenen gözlem, yolun yeni çalışma konumuna göre çözümlenmesi ve hedef klasör yoksa ilgili hata dalının çalışmasıdır.
  • Bulunmayan bir dosya yolu kullan: Mevcut bir klasörde olmayan dosya adını ver; beklenen gözlem, FileNotFoundException dalının çalışması ve mesajın dosya adı ile çalışma klasörünü kontrol etmeye yönlendirmesidir.

Sık Sorulan Sorular

File.WriteAllText ile StreamWriter arasında hangi durumda seçim yapılır?

File.WriteAllText, kısa bir metni tek çağrıyla yazıp işlemi bitirmek için uygundur. Satırları parça parça üretmek, ekleme yapmak veya yazma akışını daha yakından yönetmek istediğinde StreamWriter daha elverişlidir. Akış sınıfını using içinde kullanmak kapatma adımını düzenler.

Göreli dosya yolu hangi çalışma klasörünü temel alır?

Göreli dosya yolu, uygulamanın geçerli çalışma dizinini başlangıç noktası alır. Directory.GetCurrentDirectory() bu dizinin mutlak yolunu gösterir. Bu konum, proje klasörüyle her zaman aynı olmak zorunda değildir.

FileNotFoundException ile IOException arasındaki fark nedir?

FileNotFoundException, dosya bulunamadığında kullanılan daha özel bir istisnadır ve IOException sınıfından türemiştir. IOException ise dosya ve akış işlemlerindeki daha geniş giriş çıkış sorunlarını kapsar. Bu nedenle yakalama sırası özel istisnadan genel istisnaya doğru olmalıdır.

Dosya yolunu, kullanılan sınıfı ve hata dalını birlikte düşünerek çalıştığında C# dosya işlemlerini daha kontrollü ve anlaşılır biçimde kurabilirsin.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara