Bu yazıda C# dili kullanarak metin dosyası okuma ve yazma işlemlerinin nasıl yapılacağı anlatacağım. Dosya okuma yazma işlemini yaparken WPF Form kullanacağım fakat aynı kodları kullanarak Console yada Windows Form içinde uygulayabilirsiniz.
Uygulamayı iki aşamalı olarak hazırlanacaktır. İlk uygulamada varsayılan bir dosya açıp, üzerinde işlem yaptıktan sonra kaydetme işlemi yapılacaktır. İkinci uygulamada ise OpenFileDialog ile bir dosya açıp üzerinde işlem yapıldıktan sonra kaydetme işlemi yapılacaktır.
Uygulama 1:
WPF Uygulamasını aşağıdaki gibi oluşturuyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="50"></RowDefinition> <RowDefinition Height="*"></RowDefinition> </Grid.RowDefinitions> <Button x:Name="button" Margin="5" Grid.Column="0" Grid.Row="0" Content="Kaydet" /> <TextBox x:Name="textBox" AcceptsReturn="True" Margin="5" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2"/> </Grid> |
TextBox içinde Enter olayını iptal etmek için AcceptsReturn=”True” yapılmıştır. Çok satırlı yazmak için kullanılır.
C# Dosyada Oluşturma
Dosyadan veri okumak için dosyanın olup olmadığını kontrol edelim. Eğer dosya mevcut değilse dosyayı oluşturma işlemi ile başlayabiliriz. dosyayolu global olarak tanımlandığı için uygulamanın her bölümünde haratlıkla ulaşılabilir. Ayrıca kurucu metot ile dosya yoksa yeniden oluşturulması sağlanmıştır.
1 2 3 4 5 6 7 8 9 10 |
string dosyayolu; public MainWindow() { InitializeComponent(); dosyayolu = "yazi.txt"; } |
FileStream(dosyayolu, FileMode.OpenOrCreate, FileAccess.ReadWrite) sınıfını ve aldığı parametreleri açıklayalım.
FileStream: Dosya oluşturma yada dosyaya bilgi yazma için dosya parametrelerini alır.
dosyayolu: Dosyanın tam yolunu almaktadır. Örn: “C:\deneme.txt”
FileMode: Dosya açılacak mı oluşturulacak mı bunu belirtmek için kullanılır. OpenOrCreate yapılırsa yoksa oluşturulsun varsa açılsın anlamına gelmektedir.
FileAccess: Dosyanın okuma, yazma yada her ikisi için mi açılacağını belirtmek için kullanılır.
C# Dosyadan Veri Okuma
Metin dosyasından veri okumak için StreamReader nesnesi kullanılmaktadır. StreamReader ile satır satır okuma yaparak okunan değeri textBox içine ekliyoruz. Okuma işlemi her hangi bir butona bağlanabileceği gibi uygulama yüklendiğinde de yapılabilir. Kurucu metot içine dosya okuma işlemlerini yazmaya devam ediyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
FileStream fileStream= new FileStream(dosyayolu, FileMode.OpenOrCreate, FileAccess.ReadWrite); //dosyadan satır satır okuyup textBox içine yazıdırıyoruz using (StreamReader reader = new StreamReader(fileStream)) { while (true) { string satir = reader.ReadLine(); textBox.Text += satir + "\n"; // satır ve yeni satır(\n) if (satir == null) break; } reader.Close(); } fileStream.Close(); |
C# Dosyaya Veri Kaydetme
Dosya üzerinde değişiklik yaptıktan sonra botunun tıklama olayını verileri kaydedip güncelleme işlemini aşağıdaki gibi yapıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//dosyayı boşlatma işlemi File.WriteAllText(dosyayolu, string.Empty); //dosyayı aç ve yazmaya başla FileStream fileStream = new FileStream(dosyayolu, FileMode.Open, FileAccess.Write); using (StreamWriter writer = new StreamWriter(fileStream, Encoding.UTF8)) { writer.WriteLine(textBox.Text); writer.Close(); } fileStream.Close(); MessageBox.Show("Kayıt Yapıldı"); |
Yazılan kodları toparladığımızda aşağıdaki gibi oluşacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
public partial class MainWindow : Window { string dosyayolu; public MainWindow() { InitializeComponent(); dosyayolu = "yazi.txt"; //dosyayı okuma modunda açıyoruz FileStream fileStream= new FileStream(dosyayolu, FileMode.OpenOrCreate, FileAccess.Read); //dosyadan satır satır okuyup textBox içine yazıdırıyoruz using (StreamReader reader = new StreamReader(fileStream)) { while (true) { string satir = reader.ReadLine(); textBox.Text += satir + "\n"; // satır ve yeni satır(\n) if (satir == null) break; } reader.Close(); } fileStream.Close(); } private void button_Click(object sender, RoutedEventArgs e) { //dosyayı boşlatma işlemi File.WriteAllText(dosyayolu, string.Empty); //dosyayı aç ve yazmaya başla FileStream fileStream = new FileStream(dosyayolu, FileMode.Open, FileAccess.Write); using (StreamWriter writer = new StreamWriter(fileStream, Encoding.UTF8)) { writer.WriteLine(textBox.Text); writer.Close(); } fileStream.Close(); } } |
Uygulama 2:
İkinci uygulamada OpenFileDialog kullanacağımızı ifade etmiştim. Bunun için XAML dosyasını aşağıdaki gibi değiştiriyoruz. Yada ek olarak bir tane Dosya Aç butonu ekliyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="50"></RowDefinition> <RowDefinition Height="*"></RowDefinition> </Grid.RowDefinitions> <Button x:Name="button" Margin="5" Grid.Column="0" Grid.Row="0" Content="Kaydet" Click="button_Click" /> <Button x:Name="btnAc" Margin="5" Grid.Column="1" Grid.Row="0" Content="Dosya Aç" /> <TextBox x:Name="textBox" AcceptsReturn="True" Margin="5" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2"/> </Grid> |
OpenFileDialog ile Dosya Açma
OpenFileDialog ile dosyayı açıp textbox içine verileri ekliyoruz. Burada dikkat edilmesi gereken global olarak verilen dosyayolu burada belirtilmelidir. Kaydetme işlemi yapıldığında dosya yolu ile verilen adrese kaydedilecektir.
Ayrıca kaydetme için ayrı bir metot yazılabilir. Sayfa yüklendiğinde ve dosya açma işleminde de okuma işlemi yapılmaktadır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Text|*.txt|All|*.*"; //filitreleme dialog.CheckFileExists = true; //dosya kontrol dialog.Multiselect = false;//çoklu seçimi iptal et. if (dialog.ShowDialog() == true) //dialog açıldıktan sonra { textBox.Clear();//text kutusunu boşaltma dosyayolu = dialog.FileNames[0]; //dosyayı okuma modunda açıyoruz FileStream fileStream = new FileStream(dosyayolu, FileMode.OpenOrCreate, FileAccess.Read); //dosyadan satır satır okuyup textBox içine yazıdırıyoruz using (StreamReader reader = new StreamReader(fileStream)) { while (true) { string satir = reader.ReadLine(); textBox.Text += satir + "\n"; // satır ve yeni satır(\n) if (satir == null) break; } reader.Close(); } fileStream.Close(); } |
Uygulama 2 içinde yazılan tüm kodlar aşağıdaki gibi oluşturulmuştur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
public partial class MainWindow : Window { string dosyayolu; public MainWindow() { InitializeComponent(); dosyayolu = "yazi.txt"; //dosyayı okuma modunda açıyoruz FileStream fileStream= new FileStream(dosyayolu, FileMode.OpenOrCreate, FileAccess.Read); //dosyadan satır satır okuyup textBox içine yazıdırıyoruz using (StreamReader reader = new StreamReader(fileStream)) { while (true) { string satir = reader.ReadLine(); textBox.Text += satir + "\n"; // satır ve yeni satır(\n) if (satir == null) break; } reader.Close(); } fileStream.Close(); } private void button_Click(object sender, RoutedEventArgs e) { //dosyayı boşlatma işlemi File.WriteAllText(dosyayolu, string.Empty); //dosyayı aç ve yazmaya başla FileStream fileStream = new FileStream(dosyayolu, FileMode.Open, FileAccess.Write); using (StreamWriter writer = new StreamWriter(fileStream, Encoding.UTF8)) { writer.WriteLine(textBox.Text); writer.Close(); } fileStream.Close(); MessageBox.Show("Kayıt Yapıldı"); } private void btnAc_Click(object sender, RoutedEventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Text|*.txt|All|*.*"; //filitreleme dialog.CheckFileExists = true; //dosya kontrol dialog.Multiselect = false;//çoklu seçimi iptal et. if (dialog.ShowDialog() == true) //dialog açıldıktan sonra { textBox.Clear();//text kutusunu boşaltma dosyayolu = dialog.FileNames[0]; //dosyayı okuma modunda açıyoruz FileStream fileStream = new FileStream(dosyayolu, FileMode.OpenOrCreate, FileAccess.Read); //dosyadan satır satır okuyup textBox içine yazıdırıyoruz using (StreamReader reader = new StreamReader(fileStream)) { while (true) { string satir = reader.ReadLine(); textBox.Text += satir + "\n"; // satır ve yeni satır(\n) if (satir == null) break; } reader.Close(); } fileStream.Close(); } } } |