C# Dosya Okuma ve Yazma
[[academy-video-youtube({"vid": "cST5TT3OFyg", "start_time": "0", "title": "C# Dosya Okuma ve Yazma", "creator": "Tim Corey", "length": "24m 34s"})]]
C#'daki dosya giriş ve çıkış (I/O) işlemleri birçok yazılım uygulamasının önemli bir parçasıdır ve geliştiricilerin dosyalardan okuyup dosyalara yazmasını verimli bir şekilde sağlar. Verileri depolamak, uygulama olaylarını kaydetmek veya büyük miktarda metin ya da ikili veriyi işlemek için olsun, C# dosyalarla çalışmak için sağlam araçlar sağlar. Tim Corey'nin "C# Veri Erişimi: Metin Dosyaları" adlı videosunda, bu dosya işlemlerine dair detaylı bir gezinti sunuyor ve hem veri depolama hem de alımı için metin dosyalarının nasıl kullanılacağını vurguluyor. Bu makale, Tim'in videoda ele aldığı ana kavramlar ve tekniklerin bir özetini sunmayı hedefliyor, C#'ta dosya I/O işlemleri hakkında size pratik bilgiler veriyor.
Giriş
C#'ta, dosya giriş ve çıkış işlemleri metin dosyalarından okuma ve yazma için esastır. File sınıfı, mevcut dosyalarla etkileşim kurmak veya yeni dosyalar oluşturmak için statik yöntemler sağlar. StreamReader ve StreamWriter genellikle dosya okuma ve yazma işlemleri için kullanılır. StreamReader dosyaları satır satır okur, metinlerin her satırına veya bir dizi dizeye erişmenizi sağlar. Daha büyük dosyaları verimli bir şekilde okumak için while döngüsünü de kullanabilirsiniz. StreamWriter sınıfı, dosyalara veri yazmak için kullanılır ve dizeler ve diziler yazmayı destekler. Mevcut bir dosyaya metin eklemek veya tüm dosyayı üzerine yazmak için kullanılabilir. WriteLine ve WriteText gibi yöntemler, metin dosyalarında kolay veri manipülasyonuna izin verir.
Bu işlemler genellikle dosya yolunu tanımladığınız static void Main yöntemi içinde gerçekleştirilir. Örneğin, bir dosya adı belirleyebilir ve bir dize veya bir bütün dizi yazmak için StreamWriter kullanabilirsiniz. using ifadesi, kaynak sızıntılarını önleyerek dosyanın işlemlerden sonra düzgün bir şekilde kapatılmasını sağlar. StreamReader dosyaları satır satır okumak için de kullanılabilir ve dosya mevcut olmadığında veya erişilemediğinde oluşabilecek potansiyel hataları yönetmek için istisnalarla başa çıkılabilir. Bu dosya I/O yetenekleri, C#'ı dosyalarla verimli ve etkili bir şekilde çalışmak için mükemmel bir seçim haline getirir.
Tim, C#'ta metin dosyalarından okumanın ve yazmanın basitliğini vurgulayarak konuyu tanıtır. Bu görevlerin birkaç satır kodla başarılabileceğini, metin dosyalarını veri depolama için geçerli bir seçenek haline getirdiğini göstermektedir.
Bir Demo Konsol Uygulaması Oluşturma
Tim, Visual Studio kullanarak "TextFileDataAccessDemo" adlı yeni bir konsol uygulaması oluşturarak başlar.
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
namespace TextFileDataAccessDemo
{
class Program
{
static void Main(string[] args)
{
Console.ReadLine(); // Keeps the console window open to view the output
}
}
}using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
namespace TextFileDataAccessDemo
{
class Program
{
static void Main(string[] args)
{
Console.ReadLine(); // Keeps the console window open to view the output
}
}
}Kullanıcılara çıktıyı görme imkanı sağlamak için Console.ReadLine kullanımı ile konsol penceresini açık tutmayı açıklar.
Metin Dosyasından Okuma
Tim, File.ReadAllLines yöntemi kullanarak bir metin dosyasından nasıl okuma yapılacağını gösteriyor. Dosya yollarının nasıl ele alınacağını ve kaçış karakterlerinden kaçınmak için dize sabitlerinin nasıl kullanılacağını gösterir.
string filePath = @"C:\demos\test.txt";
List<string> lines = File.ReadAllLines(filePath).ToList();string filePath = @"C:\demos\test.txt";
List<string> lines = File.ReadAllLines(filePath).ToList();File.ReadAllLines yöntemi belirtilen dosyadaki tüm satırları okur ve bunları bir dizi dize olarak geri döndürür. Tim, bu diziyi daha kolay manipülasyon için bir listeye dönüştürür.
Metin Dosyasına Yazma
Tim, File.WriteAllLines yöntemi kullanarak bir metin dosyasına nasıl veri yazılacağını açıklar. Listeye yeni satırlar eklemeyi ve güncellenmiş listeyi dosyaya geri yazmayı gösterir.
lines.Add("Sue,Storm,WWIStorm.com");
File.WriteAllLines(filePath, lines);lines.Add("Sue,Storm,WWIStorm.com");
File.WriteAllLines(filePath, lines);Bu kod, listeye yeni bir giriş ekler ve tüm listeyi tekrar dosyaya yazar.
Bir Veri Modeli Oluşturma ve Dosyadan Dolurma
Tim, metin dosyasındaki her girdi için veri yapısını temsil etmek amacıyla bir Person sınıfı oluşturur.
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string URL { get; set; }
}public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string URL { get; set; }
}Daha sonra dosyayı okur ve Person nesnelerinden oluşan bir listeyi doldurur.
List<Person> people = new List<Person>();
List<string> lines = File.ReadAllLines(filePath).ToList();
foreach (string line in lines)
{
string[] entries = line.Split(',');
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}List<Person> people = new List<Person>();
List<string> lines = File.ReadAllLines(filePath).ToList();
foreach (string line in lines)
{
string[] entries = line.Split(',');
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}Bu kod her satırı okur, virgülle ayırır ve elde edilen veri ile bir Person nesnesi oluşturur.
Dize Enterpolasyonu
Tim, C# 6.0'da değişkenleri ve dizeleri birleştirme sürecini basitleştiren, dize enterpolasyonunu tanıtır. Bu yöntem, değişkenleri doğrudan dizenin içine gömmek için dize öncesinde $ sembolü ve {} süslü parantezlerini kullanır.
foreach (var person in people)
{
Console.WriteLine($"{person.FirstName} {person.LastName}: {person.URL}");
}foreach (var person in people)
{
Console.WriteLine($"{person.FirstName} {person.LastName}: {person.URL}");
}Bu söz dizimi, + operatörü kullanılarak yapılan geleneksel birleştirmeye kıyasla daha özlü ve verimlidir.

Veri Doğrulama
Tim, bir metin dosyası okurken veriyi doğrulamanın önemini vurgular. Verinin yapısını varsaymanın risklerini belirtir ve bölünmüş girişlerin uzunluğunu kontrol etmenizi önerir.
foreach (string line in lines)
{
string[] entries = line.Split(',');
if (entries.Length == 3)
{
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}
else
{
// Handle error
Console.WriteLine("Invalid data format.");
}
}foreach (string line in lines)
{
string[] entries = line.Split(',');
if (entries.Length == 3)
{
Person newPerson = new Person
{
FirstName = entries[0],
LastName = entries[1],
URL = entries[2]
};
people.Add(newPerson);
}
else
{
// Handle error
Console.WriteLine("Invalid data format.");
}
}olası çalışma zamanı hatalarını önler
Bir Listeye Nesneler Ekleme
Tim, listeye yeni nesneler eklemeyi gösteriyor. Listeye yeni bir kişi eklemek için Person sınıfının anonim bir örneğini kullanıyor.
people.Add(new Person { FirstName = "Greg", LastName = "Jones", URL = "WOWT.com" });people.Add(new Person { FirstName = "Greg", LastName = "Jones", URL = "WOWT.com" });Bu, tek bir satırda yeni bir Person nesnesi oluşturur ve başlatır, ardından people listesine eklenir.
Veriyi Tekrar Metin Dosyasına Yazma
Tim, Person nesnelerinin listesini metin dosyasına geri yazmayı açıklar. Person nesnelerinin listesini, her bir dizenin dosyada bir satıra karşılık geldiği bir dize listesine dönüştürür.
List<string> output = new List<string>();
foreach (var person in people)
{
output.Add($"{person.FirstName},{person.LastName},{person.URL}");
}
File.WriteAllLines(filePath, output);List<string> output = new List<string>();
foreach (var person in people)
{
output.Add($"{person.FirstName},{person.LastName},{person.URL}");
}
File.WriteAllLines(filePath, output);Bu kod, people listesinde dolaşır, her Person nesnesi için bir CSV dizesi oluşturur ve dizeler listesini dosyaya yazar.
Sonuç
Tim Corey'nin C#'ta dosya I/O işlemleri üzerindeki ayrıntılı rehberi, metin dosyalarından okuma ve metin dosyalarına yazma konusunda pratik bilgiler sağlar. Onun örneklerini takip ederek, geliştiriciler metin dosyalarını etkili bir şekilde yönetebilir ve sağlam veri depolama çözümleri uygulayabilir. Daha derin bir anlayış ve uygulamalı bir öğrenme deneyimi için, Tim Corey'nin gerçek dünya örnekleriyle daha derine indiği videosunu izleyin.

