C#’da Dosyalama İşlemleri
Dosyalama işlemleri çeşitli türdeki dosyaların içlerindeki bilgileri okumak ve yazmak gibi iki aşamadan oluşur. Bu aşamalar içerisinde de farklı türdeki dosyalar C#’da farklı okuma işlemi gerçekleştirilir. Örneğin bir yazı türündeki dosyayı okumak için StreamReader, binary türündeki dosyaları okumak içinse BinaryReader kullanılır.
Bu dosyalama işlemlerinden herhangi birini gerçekleştirmek için programımızın en başına
using System.IO; // Dosyalama işlemleri için kullanacağımız isim uzayı (bkz: C# Giriş çıkış isim uzayı)
Nereye ekleceksiniz?
C#’da Text Dosyalama işlemleri | StreamReader ve StreamWriter
Öncelikle bir sınıf ekledik ve bu sınıftan bir nesne türeterek işlem yapabiliriz. Eğer bir sınıftan nesne türeteceksek ilk aklımıza gelen şey new operatörü olmalıdır.
StreamReader Kullanım
StreamReader stroku = new StreamReader(yol); // Burada yol dosyanın adresidir.
Örnek bir Reader (Okuma) işlemi
StreamReader SR = new StreamReader(@“C\dosyalama\deneme.txt”);
SW.WriteLine(textBox1.Text);
SW.Close(); // veri kaybına uğramamak için dosyayı kapatıyoruz.
StreamWriter Kullanım
StreamWriter stryaz = new StreamWriter(yol); // Burada yol dosyanın adresidir.
Örnek bir Writer (Yazma)işlemi
StreamWriter SW = new StreamWriter(@“C:\dosyalama\deneme.txt”);
SW.WriteLine(textBox1.Text);
SW.Close();
Bir adet örnek yapalım. Formumuzu oluşturalım ve içerisinde
- 1 tane ListBox
- 1 tane TextBox
- 3 tane Button
Harddiskimizin C bölmesine bir klasör oluşturalım. Normal şartlar altında C dizinimizi direkt olarak kullanacaktık fakat bu alan içerisinde Windows bulunduğu için korumalıdır. Biz de bir alt klasör oluşturup içerisinde işlemleri yapacağız. Bu dosya içerisine de islem.txt seklinde text dosyası oluşturalım.
Formumuzu aşağıdaki gibi tasarlayalım.
Ekleceğimiz diyalog pencereleri:
Dosya oku butonu için kodlar
// Dosya okuma işlemini biraz daha otomatikleştirelim
// Bunun için OpenDialog penceresini kullanalım.
openFileDialog1.ShowDialog();
string dosya_yolu = openFileDialog1.FileName;
listBox1.Items.Clear();
StreamReader oku = new StreamReader(@dosya_yolu);
string satir;
while((satir=oku.ReadLine())!=null)
{
listBox1.Items.Add(satir);
}
oku.Close();
Yazma butonu için kodlar
saveFileDialog1.ShowDialog();
string dosya_yolu=saveFileDialog1.FileName;
StreamWriter yaz = new StreamWriter(@dosya_yolu);
yaz.WriteLine(textBox1.Text);
yaz.Close();
Dosya ekle çin kodlar
saveFileDialog1.ShowDialog();
string dosya_yolu = saveFileDialog1.FileName;
StreamWriter ekle = File.AppendText(@dosya_yolu);
ekle.WriteLine(textBox1.Text);
ekle.Close();
FileStream
FileStream sınıfını StreamReader’dan farkı her türlü dosyaya destek sunma özelliğidir. Filestream sınıfı dosyaların açma, yazma ve bunun yanında da dosyalama işlemlerinde istenilen senkronizasyona ve filtrelemeye göre iyi bir performansa çalıştırılabilir.
FileStream Nesne = FileStream (Dosya_Yolu,Dosya_modu,Erişim_tipi,Paylaşım Tipi);
FileStream fs = new FileStream(@"c:\Dosyalama\deneme.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite,FileShare.ReadWrite);
- Dosya_yolu:Dosyanın yolun bellirteceğimiz kısım.
- Dosya_modu:6 şekli vardır.
Append: Üzerine ekleme yapar.
Create: Dosya yoksa oluşturacak, varsa üzerine yazılır.
Create New: Dosya varsa bile yeni bir dosya oluşturur.
Open: Dosya varsa varolan dosyayı açar.
OpenOrCreate: Dosya yoksa yeni oluşturur, varsa dosyayı açar.
Truncate: Dosyanın mutlak var olması gerekir. Önceki dosyayı tamamen silerek dosya açar. Dosya açıldığında 0 baytır.
- Erişim_tipi: Dosya erişebilirlik özelliğidir. 3 Özellik bulunur.Read: Dosyaya yalnızca okuma erişimi (amacı) verilmiştir.
ReadWrite: Dosyaya hem okuma hem de yazma erişimi verilmiştir.
Write: Yalnızca yazma erişim kontrolu verilmiştir.
- Paylaşım Tipi: Dosya açıkken paylaşımlı olup olmadığı özellikleridir. Bu özellik sayesinde programın programın Windows ve diğer programlar ile paylaşımını kısıtlayabiliriz. 6 Özellik bulunurDelete: Dosyaya silinebilir özelliği verir. Böylece kullanıcı dosya açıkken bile dosyayı silebilir.
Inheritable: Dosya açıkken yalnızca kısıtlayıcı alt işlemler tarafından erişilebilir.
None: Tüm kısıtlamalar mevcuttur. Dosya açıkken kullanıcı dosya içerisinde okuma, yazma veya silme işleminde bulunamaz.
Read: Dosya açıkken okuma paylaşımına olanak sağlar.
ReadWrite: Hem okuma hem yazma paylaşımı verir.
Write: Yalnızca yazma paylaşımı verir.
Örnek:
Kaynak kodlar:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
FileStream fs = new FileStream(@"c:\Dosyalama\deneme.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite,FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs);
string kayit;
while ((kayit = sr.ReadLine()) != null)
{
lbx_kayit_no.Items.Add(kayit);
kayit = sr.ReadLine();
lbx_adi.Items.Add(kayit);
kayit = sr.ReadLine();
lbx_soyadi.Items.Add(kayit);
}
sr.Close();
fs.Close();
}
private void btn_kayit_ekle_Click(object sender, EventArgs e)
{
if (txt_kayit_no.Text == "" || txt_adi.Text == "" || txt_soyadi.Text == "")
{
MessageBox.Show("Tüm alanları doldurunuz!");
}
else
{
lbx_kayit_no.Items.Add(txt_kayit_no.Text);
lbx_adi.Items.Add(txt_adi.Text);
lbx_soyadi.Items.Add(txt_soyadi.Text);
}
}
private void lbx_kayit_no_SelectedIndexChanged(object sender, EventArgs e)
{
lbx_adi.SelectedIndex = lbx_kayit_no.SelectedIndex;
lbx_soyadi.SelectedIndex = lbx_kayit_no.SelectedIndex;
}
private void btn_kayit_sil_Click(object sender, EventArgs e)
{
int indexno = lbx_kayit_no.SelectedIndex;
if (indexno >= 0)
{
lbx_kayit_no.Items.RemoveAt(indexno);
lbx_adi.Items.RemoveAt(indexno);
lbx_soyadi.Items.RemoveAt(indexno);
}
else
{
MessageBox.Show("Silenecek kaydı seçiniz");
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
FileStream fs = new FileStream(@"c:\Dosyalama\deneme.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
int ks, i;
ks = lbx_kayit_no.Items.Count;
if (ks > 0)
{
for (i = 0; i < ks; i++)
{
sw.WriteLine(lbx_kayit_no.Items[i].ToString());
sw.WriteLine(lbx_adi.Items[i].ToString());
sw.WriteLine(lbx_soyadi.Items[i].ToString());
}
}
else
{
MessageBox.Show("Yazılacak kayıt yok.");
}
sw.Close();
fs.Close();
}
}
}
BinaryReader
İkili tipteki dosyalar (video,resim,ses) üzerinde işlem yapmaya sağlar.