C# ‘da Dosyalama işlemleri


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?

using_io_kullanimi

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.

dosyalama_klasoru

Formumuzu aşağıdaki gibi tasarlayalım.

visual_studio_stream_reader_ornek_uygulama

Ekleceğimiz diyalog pencereleri:

open_file_dialog_and_save_file_dialog_pencelerinin_gosterimi

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();

Projeyi indir

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.filestream_c_sharp

    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:

filestream_ornek_goster

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(); } } }

Projeyi indir

BinaryReader

İkili tipteki dosyalar (video,resim,ses) üzerinde işlem yapmaya sağlar.

Author: Ali Göksel Bektaş

Simenty kurucu ortağı. Küçüklüğünden beri website yapan Ali bulunduğu web sektöründe 10 yıldan fazla tecrübesı vardır. Bisiklet sürmeyi, kek yemeyi ve rahat koltukları sever.

Leave a Reply

Your email address will not be published. Required fields are marked *