Ara

C# İle Dosya Ve Klasör Yönetimi: File, Fileinfo, Directory Ve Daha Fazlası İçin Kapsamlı Rehber

C# dilinde dosya ve klasör işlemleri, yazılım geliştirme süreçlerinde sıkça karşılaşılan görevlerdir. Bu makalede, dosya ve klasör işlemlerini gerçekleştirmek için kullanabileceğiniz çeşitli sınıfları ve bu sınıfların nasıl kullanıldığını adım adım açıklayacağız. En sonunda, tüm bu bilgileri kullanarak kapsamlı bir dosya yönetim sınıfı oluşturacağız.

 

1. File ve FileInfo Sınıfları

File Sınıfı

File sınıfı, dosya işlemlerini gerçekleştirmek için kullanılan statik metodlar sağlar. İşte en yaygın kullanılan metodlar ve örnekler:

  • Create: Yeni bir dosya oluşturur.
  • WriteAllText: Belirtilen dosyaya metin yazar.
  • ReadAllText: Belirtilen dosyadan metin okur.
  • Delete: Belirtilen dosyayı siler.
  • Copy: Belirtilen dosyayı başka bir yere kopyalar.
  • Move: Belirtilen dosyayı başka bir yere taşır.
string filePath = "example.txt";
string destFilePath = "example_copy.txt";

// Dosya oluşturma
File.Create(filePath).Close();

// Dosyaya yazma
File.WriteAllText(filePath, "Hello, World!");

// Dosyadan okuma
string content = File.ReadAllText(filePath);
Console.WriteLine(content);  // Ekrana "Hello, World!" yazar

// Dosyayı kopyalama
File.Copy(filePath, destFilePath, true);  // Dosyayı başka bir yere kopyalar ve üzerine yazar

// Dosyayı taşıma
File.Move(destFilePath, "example_moved.txt");  // Dosyayı başka bir yere taşır

// Dosya silme
File.Delete(filePath);
File.Delete("example_moved.txt");

 

FileInfo Sınıfı

FileInfo sınıfı, dosya bilgilerine erişim ve dosya üzerinde işlemler yapmak için kullanılır. Bu sınıfın metodları nesneye yöneliktir ve daha fazla kontrol sağlar.

  • Exists: Dosyanın var olup olmadığını kontrol eder.
  • Length: Dosyanın boyutunu bayt cinsinden döner.
  • CreationTime: Dosyanın oluşturulma tarihini döner.
  • Delete: Dosyayı siler.
  • CopyTo: Dosyayı başka bir yere kopyalar.
  • MoveTo: Dosyayı başka bir yere taşır.
FileInfo fileInfo = new FileInfo(filePath);

// Dosya bilgilerini alma
if (fileInfo.Exists)
{
    Console.WriteLine(fileInfo.FullName);
    Console.WriteLine(fileInfo.Length);
    Console.WriteLine(fileInfo.CreationTime);

    // Dosyayı kopyalama
    fileInfo.CopyTo("example_copy.txt", true);  // Dosyayı başka bir yere kopyalar ve üzerine yazar

    // Dosyayı taşıma
    fileInfo.MoveTo("example_moved.txt");  // Dosyayı başka bir yere taşır

    // Dosya silme
    fileInfo.Delete();
}

 

2. FileStream, StreamReader ve StreamWriter Sınıfları

FileStream Sınıfı

FileStream sınıfı, dosyalara bayt düzeyinde erişim sağlar ve dosyalar üzerinde okuma/yazma işlemleri gerçekleştirir.

  • FileMode: Dosya oluşturma, açma, yazma, okuma gibi işlemleri belirler.
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
    byte[] data = new UTF8Encoding(true).GetBytes("Hello, FileStream!");
    fs.Write(data, 0, data.Length);  // Dosyaya veri yazar
}

 

StreamReader Sınıfı

StreamReader sınıfı, dosyalardan metin okuma işlemleri için kullanılır.

  • ReadLine: Dosyadan bir satır okur.
using (StreamReader sr = new StreamReader(filePath, Encoding.UTF8))
{
    string line;
    while ((line = sr.ReadLine()) != null)
    {
        Console.WriteLine(line);  // Dosyadaki her satırı okur ve ekrana yazar
    }
}

 

StreamWriter Sınıfı

StreamWriter sınıfı, dosyalara metin yazma işlemleri için kullanılır.

  • WriteLine: Dosyaya bir satır yazar.
using (StreamWriter sw = new StreamWriter(filePath))
{
    sw.WriteLine("Hello, StreamWriter!");  // Dosyaya metin yazar
}

 

3. Directory ve DirectoryInfo Sınıfları

Directory Sınıfı

Directory sınıfı, klasör işlemlerini gerçekleştirmek için kullanılan statik metodlar sağlar.

  • CreateDirectory: Yeni bir klasör oluşturur.
  • Exists: Klasörün var olup olmadığını kontrol eder.
  • GetFiles: Belirtilen klasördeki dosyaların listesini döner.
  • Delete: Belirtilen klasörü siler.
  • Move: Belirtilen klasörü başka bir yere taşır.
  • Copy: Belirtilen klasörü başka bir yere kopyalar.
string dirPath = "exampleDir";
string destDirPath = "exampleDir_copy";

// Klasör oluşturma
Directory.CreateDirectory(dirPath);

// Klasörün var olup olmadığını kontrol etme
if (Directory.Exists(dirPath))
{
    Console.WriteLine("Directory exists.");

    // Klasördeki dosyaları listeleme
    string[] files = Directory.GetFiles(dirPath);
    foreach (string file in files)
    {
        Console.WriteLine(file);
    }

    // Klasörü kopyalama
    CopyDirectory(dirPath, destDirPath);

    // Klasörü taşıma
    Directory.Move(destDirPath, "exampleDir_moved");

    // Klasörü silme
    Directory.Delete(dirPath, true);
    Directory.Delete("exampleDir_moved", true);
}

// Klasörü kopyalamak için yardımcı metot
void CopyDirectory(string sourceDir, string destinationDir)
{
    Directory.CreateDirectory(destinationDir);

    foreach (var file in Directory.GetFiles(sourceDir))
    {
        var dest = Path.Combine(destinationDir, Path.GetFileName(file));
        File.Copy(file, dest);
    }

    foreach (var folder in Directory.GetDirectories(sourceDir))
    {
        var dest = Path.Combine(destinationDir, Path.GetFileName(folder));
        CopyDirectory(folder, dest);
    }
}

 

DirectoryInfo Sınıfı

DirectoryInfo sınıfı, klasör bilgilerine erişim ve klasör üzerinde işlemler yapmak için kullanılır.

  • Exists: Klasörün var olup olmadığını kontrol eder.
  • GetFiles: Belirtilen klasördeki dosyaların listesini döner.
  • Create: Yeni bir klasör oluşturur.
  • Delete: Klasörü siler.
  • MoveTo: Klasörü başka bir yere taşır.
  • CopyTo: Klasörü başka bir yere kopyalar.
DirectoryInfo dirInfo = new DirectoryInfo(dirPath);

// Klasör bilgilerini alma
if (dirInfo.Exists)
{
    Console.WriteLine(dirInfo.FullName);

    // Klasördeki dosyaları listeleme
    FileInfo[] files = dirInfo.GetFiles();
    foreach (FileInfo file in files)
    {
        Console.WriteLine(file.Name);
    }

    // Klasörü kopyalama
    CopyDirectory(dirPath, destDirPath);

    // Klasörü taşıma
    dirInfo.MoveTo("exampleDir_moved");

    // Klasörü silme
    dirInfo.Delete(true);
}
else
{
    // Klasör oluşturma
    dirInfo.Create();
}

// Klasörü kopyalamak için yardımcı metot
void CopyDirectory(string sourceDir, string destinationDir)
{
    Directory.CreateDirectory(destinationDir);

    foreach (var file in Directory.GetFiles(sourceDir))
    {
        var dest = Path.Combine(destinationDir, Path.GetFileName(file));
        File.Copy(file, dest);
    }

    foreach (var folder in Directory.GetDirectories(sourceDir))
    {
        var dest = Path.Combine(destinationDir, Path.GetFileName(folder));
        CopyDirectory(folder, dest);
    }
}

 

4. Path ve DriveInfo Sınıfları

Path Sınıfı

Path sınıfı, dosya ve klasör yolları ile ilgili işlemler için kullanılır.

  • Combine: İki veya daha fazla yolu birleştirir.
  • GetExtension: Dosya uzantısını döner.
  • GetFileName: Dosya adını döner.
string combinedPath = Path.Combine("folder", "subfolder", "file.txt");
Console.WriteLine(combinedPath);  // "folder\subfolder\file.txt" döner

string fileExtension = Path.GetExtension("file.txt");
Console.WriteLine(fileExtension);  // ".txt" döner

string fileName = Path.GetFileName("folder/file.txt");
Console.WriteLine(fileName);  // "file.txt" döner

 

DriveInfo Sınıfı

DriveInfo sınıfı, sistemdeki sürücüler hakkında bilgi sağlar.

  • GetDrives: Sistemdeki tüm sürücüleri döner.
  • TotalSize: Sürücünün toplam boyutunu döner.
  • AvailableFreeSpace: Sürücünün kullanılabilir boş alanını döner.
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo drive in allDrives)
{
    Console.WriteLine("Drive {0}", drive.Name);
    Console.WriteLine("  Drive type: {0}", drive.DriveType);
    if (drive.IsReady)
    {
        Console.WriteLine("  Volume label: {0}", drive.VolumeLabel);
        Console.WriteLine("  File system: {0}", drive.DriveFormat);
        Console.WriteLine("  Available space to current user: {0, 15} bytes", drive.AvailableFreeSpace);
        Console.WriteLine("  Total available space: {0, 15} bytes", drive.TotalFreeSpace);
        Console.WriteLine("  Total size of drive: {0, 15} bytes ", drive.TotalSize);
    }
}

 

Kapsamlı Dosya Yönetim Sınıfı

Aşağıda, tüm yukarıdaki bilgileri kullanarak kapsamlı bir dosya yönetim sınıfı oluşturduk. Bu sınıf, dosya ve klasör oluşturma, okuma, yazma, silme, kopyalama ve taşıma gibi temel işlemleri gerçekleştirebilir.

using System;
using System.IO;
using System.Text;

public class FileManager
{
    // Dosya işlemleri
    public void CreateFile(string filePath)
    {
        if (!File.Exists(filePath))
        {
            File.Create(filePath).Close();
        }
    }

    public void WriteToFile(string filePath, string content, bool isWriteContinue = false)
    {
        CreateFile(filePath);

        using StreamWriter sw = new(filePath, isWriteContinue);

        if (isWriteContinue) sw.Write("\n" + content);
        else sw.Write(content);

        return true;
    }
    public static bool WriteLineToFile(string filePath, List<string> lines, bool isWriteContinue = false)
    {
        string content = "";
        for (int i = 0; i < lines.Count; i++)
        {
            if (i + 1 < lines.Count) content += lines[i] + "\n";
            else content += lines[i];
        }

        return WriteToFile(filePath, content, isWriteContinue);
    }
    public static string Read(string filePath)
    {
        string content = "";

        if (File.Exists(filePath))
        {
            using StreamReader streamReader = new(filePath, Encoding.UTF8);
            content = streamReader.ReadToEnd();
        }

        return content;
    }
    public List<string> ReadLine(string filePath)
    {
        List<string> lines = new List<string>();
        if (File.Exists(filePath))
        {
            using StreamReader reader = new(filePath, Encoding.UTF8);

            string line;
            while ((line = reader.ReadLine()) != null)
            {
                line = HttpUtility.HtmlDecode(line);
                lines.Add(line);
            }
        }

        return lines;
    }
    public void DeleteFile(string filePath)
    {
        if (File.Exists(filePath))
        {
            File.Delete(filePath);
        }
    }
    public void CopyFile(string sourceFilePath, string destFilePath, bool overwrite = false)
    {
        if (File.Exists(sourceFilePath))
        {
            File.Copy(sourceFilePath, destFilePath, overwrite);
        }
    }
    public void MoveFile(string sourceFilePath, string destFilePath)
    {
        if (File.Exists(sourceFilePath))
        {
            File.Move(sourceFilePath, destFilePath);
        }
    }

    // Klasör işlemleri
    public void CreateDirectory(string dirPath)
    {
        if (!Directory.Exists(dirPath))
        {
            Directory.CreateDirectory(dirPath);
        }
    }

    public void DeleteDirectory(string dirPath, bool recursive = false)
    {
        if (Directory.Exists(dirPath))
        {
            Directory.Delete(dirPath, recursive);
        }
    }

    public string[] ListFilesInDirectory(string dirPath)
    {
        if (Directory.Exists(dirPath))
        {
            return Directory.GetFiles(dirPath);
        }
        return new string[] { };
    }

    public void CopyDirectory(string sourceDir, string destinationDir)
    {
        if (!Directory.Exists(destinationDir))
        {
            Directory.CreateDirectory(destinationDir);
        }

        foreach (var file in Directory.GetFiles(sourceDir))
        {
            var dest = Path.Combine(destinationDir, Path.GetFileName(file));
            File.Copy(file, dest, true);
        }

        foreach (var folder in Directory.GetDirectories(sourceDir))
        {
            var dest = Path.Combine(destinationDir, Path.GetFileName(folder));
            CopyDirectory(folder, dest);
        }
    }

    public void MoveDirectory(string sourceDir, string destinationDir)
    {
        if (Directory.Exists(sourceDir))
        {
            Directory.Move(sourceDir, destinationDir);
        }
    }

    // Yol işlemleri
    public string CombinePaths(params string[] paths)
    {
        return Path.Combine(paths);
    }
}

 

Kullanım Örnekleri

FileManager fileManager = new FileManager();

// Dosya oluşturma ve yazma
string filePath = "test.txt";
fileManager.CreateFile(filePath);
fileManager.WriteToFile(filePath, "Merhaba, dünya!");

// Dosyadan okuma
string content = fileManager.ReadFromFile(filePath);
Console.WriteLine(content);

// Dosya kopyalama
fileManager.CopyFile(filePath, "test_copy.txt", true);

// Dosya taşıma
fileManager.MoveFile("test_copy.txt", "test_moved.txt");

// Dosya silme
fileManager.DeleteFile(filePath);
fileManager.DeleteFile("test_moved.txt");

// Klasör oluşturma ve dosya listeleme
string dirPath = "testDir";
fileManager.CreateDirectory(dirPath);
string[] files = fileManager.ListFilesInDirectory(dirPath);
foreach (string file in files)
{
    Console.WriteLine(file);
}

// Klasör kopyalama ve taşıma
fileManager.CopyDirectory(dirPath, "testDir_copy");
fileManager.MoveDirectory("testDir_copy", "testDir_moved");

// Klasör silme
fileManager.DeleteDirectory(dirPath, true);
fileManager.DeleteDirectory("testDir_moved", true);

Bu makalede, dosya ve klasör işlemleri için C#'ta kullanılabilecek çeşitli sınıfları ve metodları detaylı bir şekilde inceledik. Kapsamlı dosya yönetim sınıfımız, uygulamalarınızda bu işlemleri kolayca gerçekleştirmenizi sağlayacak araçlar sunmaktadır.

Author

Bilgisayar programcılığı bölümü mezunuyum. Web ve masaüstü uygulama geliştiricisiyim. C#,.Asp.Net Core, JQuery, Ajax, Entity Framework konularında bilgi sahibiyim. Bu sitenin kurucusuyum . Aynı zamanda şiir yazmayı seven birisiyim. 2023 yılında "Gökkuşağının Koyu Tonu" adlı ilk şiir kitabım yayınlandı. Yazmaya devam ediyorum.
Yorum Yap
Yorumlar (0)