C# Dosya ve Klasör İşlemleri

C#, Dosya ve klasör sistemiyle çalışmak için aşağıdaki sınıfları sağlar. Dosya ve klasöre erişmek, dosyaları okumak veya yazmak için açmak, yeni bir dosya oluşturmak veya mevcut dosyaları bir konumdan diğerine taşımak gibi benzeri işlemler için kullanılabilirler.

FileDosya, kopyalama, oluşturma, taşıma, silme, okuma, yazma için veya şifreleme veya şifre çözme, bir dosyanın var olup olmadığını kontrol etme, bir dosyanın içeriğine satır veya metin ekleme, son erişim zamanını alma gibi farklı işlevler sağlayan statik bir sınıftır.
FileInfoFileInfo sınıfı, statik bir File sınıfıyla aynı işlevselliği sağlar. Bir dosyadan bayt okumak veya yazmak için manuel kod yazarak bir dosya üzerinde okuma/yazma işlemlerini nasıl yapacağınız konusunda daha fazla kontrole sahip olursunuz.
FileStream.txt, .exe, .jpg veya başka herhangi bir dosya olsun, fiziksel bir dosyadan/dosyaya bayt okur veya yazar. FileStream, Stream sınıfından türetilmiştir.
StreamReaderStreamReader, kodlanmış bir değer kullanarak baytları karakterlere dönüştürerek bir Akıştan karakterleri okumak için yardımcı bir sınıftır. FileStream, MemoryStream, vb. gibi farklı Akışlardan dizeleri (karakterleri) okumak için kullanılabilir.
StreamWriterStreamWriter, karakterleri baytlara dönüştürerek bir string ifadeyi bir Akışa yazmak için yardımcı bir sınıftır. FileStream, MemoryStream, vb. gibi farklı Akışlara dizeler yazmak için kullanılabilir.
DirectoryKlasör, alt klasör oluşturmak, taşımak, silmek ve bunlara erişmek için işlevsellik sağlayan statik bir sınıftır.
DirectoryInfoDirectoryInfo, alt klasörleri oluşturmak, taşımak, silmek ve bunlara erişmek için instance metotlar sağlar.
PathPath, bir dosyanın uzantısını alma, bir dosyanın uzantısını değiştirme, mutlak fiziksel yolu alma ve yolla ilgili diğer işlevler gibi işlevler sağlayan statik bir sınıftır.
DriveInfoBu sınıf, bir sürücüyü modeller ve sürücü bilgilerini sorgulamak için metotlar ve özellikler sağlar.

Yukarıda ki tabloda C# programlama dilinde dosya ve klasör işlemlerinde en çok kullanılan sınıflar (class) listelenmiştir. Bu sınıflar System.IO Namespace altında gruplanmıştır.

System.IO, dosyaları ve veri akışlarını okumaya ve yazmaya izin veren türleri ve temel dosya ve dizin desteği sağlayan türleri içerir.

Yukarıda ki görsel System.IO namespace’inin bazı sınıflarını gösterir.

Listelemiş olduğum sınıfların detayları ve kullanım örnekleri için tablodaki sınıf başlıkları üzerinde bulunan linkleri kullanabilirsiniz.


C# File

C# tarafından, dosya oluşturma, dosya açma, dosya okuma ve yazma gibi işlemleri gerçekleştirmek için tasarlanan statik bir sınıftır.

File Create – C# ile Dosya Oluştur

File.Create(@"C:\Users\fatih.alkan\Desktop\new.txt");

File Write – C# ile Dosya Yazma

WriteAllText: Parametre ile iletilin içeriği dosyaya yazar. Escape (Kaçış) ifadelerini destekler.

File.WriteAllText(@"C:\Users\fatih.alkan\Desktop\new.txt", "Merhaba Dünya \n\tFatih Alkan");

WriteAllLine: Parametre ile iletilen diziyi satır satır satır yazar.

File.WriteAllLines(@"C:\Users\fatih.alkan\Desktop\new.txt", isimler);

File Read – C# ile Dosya Okuma

ReadAllText: Belirtilen adresteki dosyanın tamamını okur.

string readAll = File.ReadAllText(@"C:\Users\fatih.alkan\Desktop\new.txt");
Console.WriteLine(readAll);

ReadAllLine: Belirtilen adresteki dosyayı satır satır okuyup bir diziye atar.

string[] readLine = File.ReadAllLines(@"C:\Users\fatih.alkan\Desktop\new.txt");
foreach (var item in readLine)
{
    Console.WriteLine(item);
}

File Delete – C# ile Dosya Silme

Belirtilen adresteki dosyayı siler.

File.Delete(@"C:\Users\fatih.alkan\Desktop\new.txt");

File Copy – C# ile Dosya Kopyalama

Belirtilen adresteki dosyayı yeni bir adrese kopyalar.

File.Copy(@"C:\Users\fatih.alkan\Desktop\new.txt", @"C:\Users\fatih.alkan\Desktop\newCopy.txt");

File Move – C# ile Dosya Taşıma

Belirtilen adresteki dosyayı yeni bir adrese taşır.

File.Move(@"C:\Users\fatih.alkan\Desktop\new.txt", @"C:\Users\fatih.alkan\Desktop\newCopy.txt");

File Status – C# ile Dosya Kontrolü

Belirtilen adresteki dosyanın var olup/olmadığı bilgisini bool tipinde iletir.

bool status = File.Exists(@"C:\Users\fatih.alkan\Desktop\new.txt");

C# FileInfo

C# tarafından belirtilen adresteki dosyanın tüm bilgilerini elde etmek için tasarlanan bir sınıftır. FileInfo üzerinden işlem yapmak için nesne oluşturmanız gerekmektedir.

FileInfo fileInfo = new FileInfo(@"C:\Users\fatih.alkan\Desktop\new.txt");

Console.WriteLine("Dosya Varmı: " + fileInfo.Exists);

Console.WriteLine("Dosya Oluşturma Tarihi: " + fileInfo.CreationTime);

Console.WriteLine("Dosyanın Tam Ismi: " + fileInfo.FullName);

Console.WriteLine("Dosyanın Ismi: " + fileInfo.Name);

Console.WriteLine("Dosyanın Uzantısı: " + fileInfo.Extension);

Console.WriteLine("Dosyanın Değişiklik Tarihi: " + fileInfo.LastWriteTime);

Console.WriteLine("Dosyanın Boyutu (Byte): " + fileInfo.Length);

Console.WriteLine("Dosyanın Adres: " + fileInfo.DirectoryName);

C# FileStream

C# tarafından, dosya okumak ve yazmak için kullanılan bir sınıftır. FileStream’i kullanarak dosyalar üzerinde işlem yapmak için FileStream sınıfından bir nesne oluşturmanız gerekmektedir. Bu nesnenin dört parametresi bulunmaktadır.

  • Name of the File: Dosyanın adı veya tam yolu. (FileName.txt, @”C:\Users\Username\Documents\FileName.txt”)
  • FileMode: Dosyanın açılış modu. (Open (Mevcut dosyayı açma), Create (Yeni bir dosya oluştur), OpenOrCreate (Varsa aç yoksa oluştur), Append (Mevcut dosyayı aç ve sonuna bilgi ekle), Truncate (Mevcut dosyayı aç boyutunu sıfır yap.)
  • FileAccess: Dosyanın erişimi. (Read, Write, ReadWrite)
  • FileShare: Bu belirli dosyaya diğer FileStream nesnelerine erişimi belirtir. (None (Dosya paylaşma), Read (Okumasına izin ver), Write (Yazılmasına izin ver), ReadWrite (Okunabilir/Yazılabilir), Delete (Silinmesine izin ver), Inheritable (Devir alınabilir.)

Syntax:

FileStream fileObj = new FileStream(file Name/Path, FileMode.field, FileAccess.field, FileShare.field);

Örnek Kullanım:

//File.Create(@"C:\Users\fatih.alkan\Desktop\new.txt");

//Metin dosyasına yazmak için FileStream Nesnesi oluşturyoruz.
FileStream fileWrite = new FileStream(@"C:\Users\fatih.alkan\Desktop\new.txt", FileMode.Create, FileAccess.Write, FileShare.None);

string text = "Merhaba FileStream ile C#";

//Metni byte çeviriyoruz.
byte[] writeArr = Encoding.UTF8.GetBytes(text);

fileWrite.Write(writeArr, 0, text.Length);

fileWrite.Close();

//Metin dosyasını okumak için FileStream Nesnesi oluşturyoruz.
FileStream fileRead = new FileStream(@"C:\Users\fatih.alkan\Desktop\new.txt", FileMode.Open, FileAccess.Read,FileShare.Read);

byte[] readArr = new byte[text.Length];

int count;

//Dosyanın sonuna kadar oku.
while ((count = fileRead.Read(readArr, 0, readArr.Length)) > 0)
{
    Console.WriteLine(Encoding.UTF8.GetString(readArr, 0, count));
}

// Close the FileStream Object
fileRead.Close();

C# Stream Reader

StreamReader, kodlanmış bir değer kullanarak baytları karakterlere dönüştürerek bir Akıştan karakterleri okumak için kullanılan yardımcı bir sınıftır. FileStream, MemoryStream, vb. gibi farklı Akışlardan dizeleri (karakterleri) okumak için kullanılabilir.

Metotlar:

  • Close(): StreamReader nesnesinin akışını kapatır.
  • Peek(): Bir sonraki kullanılabilir karakteri döndürür. Yoksa -1 döndürür.
  • Read(): Karakter karakter okuma yapar. Okuma yapacak karakter yoksa -1 döndürür.
  • ReadLine(): Bir karakter satırı okur ve string olarak döndürür. Karakter okumanın sonuna geldiğinde null döndürür.
  • Seek(): Dosyadan belirli bir yerinde okumak/yazmak için kullanılır.

Özellikler:

CurrentEncoding: StreamReader nesnesinin kullandığı geçerli karakter kodlamasını alır.

EndOfStream: Geçerli akış konumunun sonunda olup olmadığını gösteren bir değer alır.

BaseStream: Altta yatan stream döndürür.

StreamReader streamReader = new StreamReader(@"C:\Users\fatih.alkan\Desktop\new.txt");

//Okumaya nereden ve kaçıncı karakterden başlanacak
streamReader.BaseStream.Seek(10, SeekOrigin.Begin);

while (streamReader.EndOfStream != true)
{
    Console.WriteLine(streamReader.ReadLine());
}
streamReader.Close();

C# Stream Writer

C# dilindeki StreamWriter Sınıfı, metin verilerinin bir dosyaya yazılmasında kullanılır. karakterlerin belirli bir biçimde akışa yazılması için kullanılır.

Metotlar:

  • Close(): StreamReader nesnesinin akışını kapatır.
  • Flush(): Arabelleklerdeki verileri temizler ve arabelleğe alınan tüm verilerin alttaki akışa yazılmasına neden olur.
  • Write(): Akışa veri yazar.
  • WriteLine(): Write() ile aynıdır, ancak verilerin sonunda satır başı yapar.
  • Dispose(): StreamWriter tarafından kullanılan yönetilmeyen kaynakları serbest bırakır.

Özellikler:

  • AutoFlash: System.IO.StreamWriter.Write(System.Char) öğesine yapılan her çağrıdan sonra StreamWriter’ın arabelleğini temel alınan akışa boşaltıp temizlemeyeceğini gösteren bir değer alır.
  • Encoding: Çıktının yazıldığı System.Text.Encoding’i alır.
//Parametredeki dosyaya yaz. true, mevcut verilerin üzerine yazmak istiyorsanız
StreamWriter sw = new StreamWriter(path, true)

sw.WriteLine("ABC");
sw.WriteLine("DEF");

//Geçerli yazar için tüm arabellekleri temizler
streamWriter.Flush();
sw.Close();

C# Directory

.C# Directory sınıfı, klasörler ve alt klasörler oluşturmak, kopyalamak, taşımak ve silmek için statik yöntemler sağlar.

Create Folder – C# Klasör Oluşturma

Belirtilen yolda belirtilen Windows güvenliğine sahip bir klasör oluşturur.

Directory.CreateDirectory(@"C:\Users\fatih.alkan\Desktop\new");

Delete Folder – C# Klasör Silme

Belirtilen yolda ki klasörü siler.

Directory.Delete(@"C:\Users\fatih.alkan\Desktop\new");

Exists Folder – C# Klasör Var mı

Belirtilen dizinde klasörün var olup olmadığını kontrol eder.

Directory.Exists(@"C:\Users\fatih.alkan\Desktop\new");

Move Folder – C# Klasör Taşıma

Varolan bir klasörü tam yol ile belirtilen yeni bir dizine taşır.

Directory.Move(@"C:\Users\fatih.alkan\Desktop\new", @"C:\Users\mew");

Copy Folder – C# Klasör Kopyalama

Aslında bir kopyalama işlemi değildir. Bir klasörün taşınmasını istediğiniz yere yeni bir klasörü oluşturur ve ardından alt dosyaları kopyalamaktır.


Directory Info

DirectoryInfo sınıfı, dosyalar üzerinde değil klasörler üzerinde çalışması dışında, FileInfo sınıfıyla hemen hemen aynı özellikleri paylaşır. DirectoryInfo sınıfı statik metotlara sahip değildir ve yalnızca nesneler üzerinden kullanılabilir. DirectoryInfo nesnesi, bir disk üzerindeki fiziksel bir klasörü temsil eder. Ayrıca klasörleri silmek, yeni bir klasör ve alt klasörler oluşturmak için metotlar sağlar.

Metotlar:

  • Create(): Klasör oluşturmak için kullanılır.
  • CreateSubdirectory(): Alt klasör oluşturmak için kullanılır.
  • MoveTo(): Klasörü taşımak için kullanılır.
  • Delete(): Klasörü silmek için kullanılır.
  • GetDirectories(): Verilen klasörü yolundaki alt klasörleri almak için kullanılır.
  • GetFiles(): Belirtilen klasördeki dosyaları almak için kullanılır.

Özellikler:

  • CreationTime: Klasörün oluşturulma tarihi.
  • Exists: Klasörün var olup/olmadığı bilgisini verir.
  • FullName: Klasörün tam yolunu verir.
  • Name: Klasörün adını verir.
  • LastAccessTime: Son erişim zamanının tarih ve saatini döndürür.
  • LastWriteTime: Son dosya kaydetme tarihini ve saatini döndürür
  • Root: Bir yolun kök kısmını alır.
DirectoryInfo fi = new DirectoryInfo(@ "D:\newfile");  
Console.WriteLine("Klasör Adı {0} ", fi.Name);  
Console.WriteLine("Klasör oluşma tarihi {0} ", fi.CreationTime.ToLongTimeString());  
Console.WriteLine("Klasör son erişim tarihi {0} ", fi.LastAccessTime.ToLongDateString());  
Console.WriteLine("Klasör var mı: ", fi.Exists);  
Console.WriteLine("Klasör yazılma tarihi {0} ", fi.LastWriteTime);  
Console.WriteLine("Klasör kök dizini {0} ", fi.Root);  

DriveInfo

C#’daki DriveInfo sınıfı, sistem üzerinde var olan diskin türünü, alanını vb. sistem bilgilerini bize döndürür.

DriveInfo info = new DriveInfo("C");

// Büyüklük bilgileri.
Console.WriteLine("Kullanılabilir: " + info.AvailableFreeSpace);
Console.WriteLine("Toplam Boş Alan: " +info.TotalFreeSpace);
Console.WriteLine("Toplam Boyut: " + info.TotalSize);
Console.WriteLine();

// Format ve tip.
Console.WriteLine("Diskin Formatı: " +info.DriveFormat);
Console.WriteLine("Diskin Tipi:" + info.DriveType);
Console.WriteLine();

// İsim ve Klasör.
Console.WriteLine("Diskin İsmi: " + info.Name);
Console.WriteLine("Kök Dizin: " + info.RootDirectory);
Console.WriteLine("Diskin Etiketi: " + info.VolumeLabel);
Console.WriteLine();

Path

Bu sınıf, dosya yolu veya klasör yolu bilgilerine sahip string instance’lar üzerinde işlemler gerçekleştirmek için kullanılır.

GetFileName

Dosya adını bir yoldan almak için kullanılır.

string path = @"C:\temp\readme.txt";
string fileName = Path.GetFileName(path);

Sonuç: readme.txt

GetDirectoryName

Klasör adını bir yoldan almak için kullanılır.

string path = @"C:\temp\readme.txt";
string dirname = Path.GetDirectoryName(path);

Sonuç: C:\temp

GetFullPath

Bir yolun tam adresini almak için kullanılır.

string relativePath = @"..\..\readme.txt";
string fullPath = Path.GetFullPath(relativePath);

Sonuç: C:\project\bin\readme.txt

Combine

İki veya daha fazla string yolu bir yolda birleştirmek için kullanılır.

string directory = @"C:\temp";
string fileName = "readme.txt";
string fullPath = Path.Combine(directory, fileName);

Sonuç: C:\temp\readme.txt

GetExtension

Bir yolun dosya uzantısını almak için kullanılır.

string path = @"C:\temp\readme.txt";
string extension = Path.GetExtension(path);

Sonuç: .txt

GetTempFileName

.tmp dosya uzantılı geçici bir dosya oluşturmak ve bu dosyanın yolunu döndürmek için kullanılır.

string tempFileName = Path.GetTempFileName();

Sonuç: C:\Users\username\AppData\Local\Temp\tmpC430.tmp

GetTempPath

Geçerli kullanıcının geçici yolunu almak için GetTempPath() yöntemini kullanılır.

string tempDir = Path.GetTempPath();

Sonuç: C:\Users\username\AppData\Local\Temp\

ChangeExtension

bir yolun dosya uzantısını değiştirmek için kullanılır.

string path = @"C:\temp\readme.txt";
string newExtension = ".csv";
string newPath = Path.ChangeExtension(path, newExtension);