Merhaba, bu dersimizde dosya işlemlerinden bahsedeceğiz. Dosya işlemlerinden kastımız, bir dosyadan okumak ve bir dosyaya yazmak. Bu işlemler haricinde dosyalarla alakalı olan birkaç sınıftan da bahsedeceğiz. Aslında dosyalarla ilgili anlatılacak şeyler çok fazla ve bir makaleye sığmaz; ancak bu makalede sadece önemli noktalardan ve en çok kullanabileceğiniz şeylerden bahsedeceğiz.

DERS 13 : Dosya İşlemleri

Directory ve File Sınıfları

Directory ve File sınıfları System.IO isim alanında (namespace) bulunur. Dolayısıyla bu sınıfları kullanabilmek için, programımıza using System.IO; satırını eklemeliyiz. Directory ve File sınıflarında statik metotlar bulunur. Bu iki sınıfın birçok metodu benzerdir. Tek farkları Directory sınıfı klasörler üzerinde işlem yaparken File sınıfı dosyalar üzerinde işlem yapar. Bu metotlara örnek olarak Delete, Exists ve Move’u verebiliriz. Aşağıdaki kod bloğunda Directory ve File sınıfına ait bazı metotların kullanımını ve açıklamalarını görebilirsiniz.

C#
static void Main(string[] args)
{
    string directory = "C:\\Folder";
    string file = "C:\\Folder\\File.txt";

    Directory.CreateDirectory(directory); //Klasör oluşturur
    bool isDirectoryExists = Directory.Exists(directory); //Klasör var mı diye bakar
    string[] directories = Directory.GetDirectories(directory); //Klasördeki klasörleri getirir
    string[] files = Directory.GetFiles(directory); //Klasördeki dosyaları getirir
    Directory.Move("C:\\Folder", "C:\\Folder2"); //Klasörü ve içindekileri taşır, ismini değiştirir
    Directory.Delete(directory); //Boş klasörü siler

    File.Create(file); //Dosya oluşturur
    bool isFileExists = File.Exists(file); //Dosya var mı diye bakar
    File.Move("C:\\Folder\\File.txt", "C:\\Folder\\File2.txt"); //Dosyayı taşır, ismini değiştirir
    File.Delete(file); //Dosyayı siler
}
DirectoryInfo ve FileInfo Sınıfları

Directory ve File sınıfları klasör ve dosyalar üzerinde işlemler yaparken sadece dosya yolunu kullanırlar ve örneğin bir klasördeki tüm dosyaları getiren metodu çağırdığınızda size sadece dosyaların yollarını döndürür. DirectoryInfo ve FileInfo sınıfları ise, dosya yolunun haricinde dosya adı, uzantısı, boyutu, oluşturulma zamanı gibi ekstra bilgiler verir. Bu iki sınıf statik değildir ve bir obje üzerinden erişilebilir. Aşağıdaki örneklere bakabilirsiniz:

C#
static void Main(string[] args)
{
    string directory = "C:\\Folder";
    string file = "C:\\Folder\\File.txt";

    DirectoryInfo dInfo = new DirectoryInfo(directory);
    DateTime dCreateDate = dInfo.CreationTime; //Oluşturulma zamanı
    dInfo.Delete(); //Klasörü siler
    string dFullName = dInfo.FullName; //Klasörün yolu
    string dName = dInfo.Name; //Klasörün adı
    DirectoryInfo parent = dInfo.Parent; //Üst klasör bilgisi

    FileInfo fInfo = new FileInfo(file);
    DateTime fCreateDate = fInfo.CreationTime; //Oluşturulma zamanı
    DirectoryInfo fDirectory = fInfo.Directory; //Bulunduğu klasörün bilgisi
    string fDirectoryName = fInfo.DirectoryName; //Bulunduğu klasörün adı
    string fExtension = fInfo.Extension; //Uzantısı
    string fFullName = fInfo.FullName; //Dosyanın yolu
    long fSize = fInfo.Length; //Dosyanın byte cinsinden boyutu
    string fName = fInfo.Name; //Dosyanın adı
}
Dosyaya Yazma

Dosyaya yazma ve dosyadan okuma yapmak için birkaç farklı yöntem mevcut. Bu makalede StreamWriter ve StreamReader sınıflarını kullanacağız. Metin bazlı okuma yazma işlemleriniz için bu sınıfları kullanabilirsiniz. Eğer binary olarak okuma yazma yapacaksanız BinaryWriter ve BinaryReader sınıflarını kullanabilirsiniz. Dosyaya yazma işlemi için StreamWriter sınıfını aşağıdaki gibi kullanıyoruz:

C#
static void Main(string[] args)
{
    string file = "C:\\Folder\\File.txt";

    FileStream stream = File.Create(file);
    StreamWriter sw = new StreamWriter(stream);
    sw.WriteLine("Tek satır metin.");
    sw.Write("İkinci satır ");
    sw.WriteLine("ve devamı.");
    sw.WriteLine("Üçüncü satır.");

    sw.Close();
}

Gördüğünüz gibi aslında çok basit bir işlem. Eğer ortalıkta bir dosya yoksa File.Create ile dosyamızı oluşturuyoruz ve dönen değeri StreamWriter’a parametre olarak geçiyoruz. Eğer dosya zaten mevcut olsaydı, bu ilk komuta gerek kalmayacaktı ve StreamWriter’a direkt olarak dosyanın yolunu geçebilecektik. Dosya mevcut olduğunda, bu dosyanın içeriğini baştan yazmak yerine ekleme yapmak isterseniz, dosya yolunun yanında Append parametresini de true olarak geçmeniz gerekiyor. StreamWriter sınıfından bir obje (sw) oluşturduktan sonra başlıyoruz dosyaya yazmaya. WriteLine metodu ile dosyaya bir satır yazı yazıp sonuna \r\n karakteri koyuyoruz, yani yeni satırı başlatıyoruz. Eğer WriteLine yerine Write metodunu kullanırsak, \r\n karakteri koymamış oluyoruz ve daha sonraki komutta aynı satırdan devam ediyoruz. Dosyaya yazma işlemlerimiz bittiğinde Close metoduyla yazdıklarımızın diske kaydedilmesini sağlıyoruz. Eğer Close metodunu kullanmazsak yazdıklarımız bellekte duracaktır ve program kapandığında silinecektir, yani diske kaydedilmeyecektir. Yukarıdaki kod bloğu File.txt dosyasına aşağıdaki gibi bir metin yazdırıyor:

Tek satır metin.
İkinci satır ve devamı.
Üçüncü satır.

Dosyadan Okuma

Okuma işlemi yazma işleminden daha basit. Bu sefer de StreamReader sınıfını kullanıyoruz. Az önce oluşturduğumuz dosyayı aşağıdaki gibi okuyabiliriz:

C#
static void Main(string[] args)
{
    string file = "C:\\Folder\\File.txt";

    StreamReader sr = new StreamReader(file);
    string firstLine = sr.ReadLine();
    string otherLines = sr.ReadToEnd();

    sr.Close();
}

İlk satırda StreamReader objemizi (sr) oluşturuyoruz. Oluştururken okumak istediğimiz dosyanın yolunu veriyoruz. Sonrasında ReadLine veya ReadToEndmetotlarını kullanıyoruz. ReadLine metodu, dosyadan satır satır okuma yapmamızı sağlıyor. Bu komutu while döngüsüyle kullanabiliriz. Eğer tüm dosyayı tek seferde okumak istiyorsak ReadToEnd metodunu kullanıyoruz. Bu metot bize tüm dosyayı tek satır olarak döndürüyor. Dönen sonuç içerisindeki \r\n karakterleri satır sonlarını ifade ediyor. Burada dikkat etmeniz gereken nokta, eğer yukarıdaki koddaki gibi önce ReadLine sonra ReadToEnd metodunu kullanırsanız, ReadLine ile ilk satır okunduğu için ReadToEnd metodu, ikinci satırdan itibaren okumaya başlayacaktır.

Dosya işlemleriyle alakalı, internette birçok örnek proje bulabilirsiniz. Eğer projenizde veri saklamak istiyorsanız dosyaya yazmak yerine veritabanı kullanmanız daha uygun olacaktır. Dolayısıyla dosya işlemleri daha çok uygulamanın konfigürasyonlarını kaydetmek için kullanılır. Böylece bu dersimizin sonuna geldik. Bir sonraki dersimizde görüşmek üzere…

Benzer Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

warning
www.kemalkefeli.com.tr üzerindeki herhangi bir yazının veya kodun izinsiz olarak başka bir yerde kullanılması yasaktır.