Altbilgi içeriğine atla
Iron Academy Logo
C# Öğrenin
C# Öğrenin

Diğer Kategoriler

C# Sistem Dosyası Uzmanlaşma

Tim Corey
35m 07s

C#, dosya sistemi ile etkileşimde bulunmak için güçlü yetenekler sunar, dosya manipülasyonu, dizin yönetimi ve bilgi alma gibi görevleri etkinleştirir. Tim Corey, "Working With The File System in C# - Managing Folders and Files" başlıklı videosunda, C# kullanarak dosyalar ve dizinlerle çalışmanın temel prensiplerini inceliyor.

Bu makale, C#'ta dosya sistemi işlemlerine kapsamlı bir genel bakış sunmayı ve otomasyon görevlerini, dizinleri yönetmeyi ve dosyaları ele almayı vurgulayan temel teknikleri öne çıkarmayı amaçlıyor.

Giriş

C#'ta System.IO ad alanı, dosya sistemi ile etkileşim için güçlü sınıflar sağlar. Bu sınıflar, File, FileInfo, Directory ve DirectoryInfo gibi, çeşitli dosya işlemlerini gerçekleştirmenize olanak tanır; dosyalar oluşturma, veri okuma, dosyalara yazma ve belirli bir yolda belirlenen bir dosyanın zaten mevcut olup olmadığını kontrol etme gibi. Bu sınıfları kullanarak metin dosyaları, ikili dosyalar ve çeşitli uzantılara sahip dosyaları yönetebilirsiniz. Create(), Exists() ve Delete() gibi yöntemler, geliştiricilerin dosya ve dizinleri etkili bir şekilde yönetmelerini sağlar.

Örneğin, File sınıfı, bir dosyanın zaten mevcut olup olmadığını kontrol etmek, yeni bir dosya oluşturmak veya dosyaları farklı modlarda (okuma, yazma veya ekleme gibi) açmak için statik yöntemler içerir. FileInfo sınıfını kullanarak, bir dosya hakkında, oluşturulma zamanı veya tam yolu gibi daha fazla detay alabilirsiniz. DirectoryInfo sınıfı, dizinlerle çalışmanıza, dosyaları almanıza veya yeni dizinler oluşturmanıza olanak tanır. Bu sınıflar ve metodlar, mevcut dosyaları ve yeni dosyaları ele alabilecek esnekliği sağlar, birden çok dosyayı yönetir ve hatta dosya verilerini bayt düzeyinde ele alabilir, C#'ı dosya sistemi işlemleri için güçlü bir araç yapar.

Tim, dosya görevlerini otomatikleştirme, örneğin yedekleme oluşturma, dosyaları düzenleme ve dosya bilgilerini alma gibi güçlü C# özelliklerini vurgulayarak başlar. Videoyu, pratik örnekler ve eğitim kaynakları aracılığıyla C# öğrenimini daha kolay hale getirme hedefini açıklayarak tanıtır.

Demo Konsol Uygulaması Oluşturma

Tim, .NET Framework kullanarak "FileSystemDemo" adlı yeni bir konsol uygulaması oluşturarak işe başlar. Bu gösterim için .NET Framework'ü .NET Core'a tercih etmesinin nedenini vurgular.

using System;
using System.IO;

namespace FileSystemDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine();
        }
    }
}
using System;
using System.IO;

namespace FileSystemDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine();
        }
    }
}

Kök Yolu Ayarlama

Tim, demoya yönelik sistemindeki belirli bir dizine işaret eden bir kök yol değişkeni ayarlar.

string rootPath = @"C:\temp\demos\filesystem";
string rootPath = @"C:\temp\demos\filesystem";

O, @ sembolünün, onları kaçırmadan yol içinde ters eğik çizgilerin kullanılmasına izin verdiğini açıklar.

Yoldaki Tüm Dizinleri Okuma

Tim, belirtilen kök yol içinde tüm dizinleri nasıl alacağını Directory.GetDirectories yöntemi ile gösteriyor.

string[] directories = Directory.GetDirectories(rootPath);
foreach (string directory in directories)
{
    Console.WriteLine(directory);
}
string[] directories = Directory.GetDirectories(rootPath);
foreach (string directory in directories)
{
    Console.WriteLine(directory);
}

Bu kod, kök dizin içindeki tüm alt dizinlerin tam yollarını yazdırır.

Dizin Listeleme

Alt Dizinleri Rekürsif Olarak Okuma

Aramaya alt dizinleri dahil etmek için Tim, GetDirectories yöntemine bir arama deseni ve arama seçenekleri ekler.

string[] allDirectories = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories);
foreach (string directory in allDirectories)
{
    Console.WriteLine(directory);
}
string[] allDirectories = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories);
foreach (string directory in allDirectories)
{
    Console.WriteLine(directory);
}

Bu değişiklik, bütün iç içe alt dizinlerin aramaya dahil edilmesini sağlar.

Yoldaki Tüm Dosyaları Okuma

Tim, dizin sınıfı ve belirtilen kök yol içindeki tüm dosyaları nasıl alacağını Directory.GetFiles yöntemi ile gösteriyor.

string[] files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);
foreach (string file in files)
{
    Console.WriteLine(file);
}
string[] files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);
foreach (string file in files)
{
    Console.WriteLine(file);
}

Bu kod, kök dizin ve alt dizinleri içindeki tüm dosyaların tam yollarını yazdırır.

Dosyalar Listeleme

Dosya Adları ve Yollarını Çıkartma

Tim, dosya adlarını ve yollarını nasıl çıkaracağını Path sınıfıyla açıklıyor. Bu, dosyanın uzantısı olmadan dosya adını ve her dosyanın dizin adını almak gibi işlemleri içerir.

foreach (string file in files)
{
    Console.WriteLine(Path.GetFileName(file)); // File name with extension
    Console.WriteLine(Path.GetFileNameWithoutExtension(file)); // File name without extension
    Console.WriteLine(Path.GetDirectoryName(file)); // Directory name
}
foreach (string file in files)
{
    Console.WriteLine(Path.GetFileName(file)); // File name with extension
    Console.WriteLine(Path.GetFileNameWithoutExtension(file)); // File name without extension
    Console.WriteLine(Path.GetDirectoryName(file)); // Directory name
}

Bu kod parçacığı, aynı dosyanın belirtilen yoldaki farklı bölümlerini nasıl çıkarıp yazdıracağınızı gösterir.

Dosya Bilgilerini Alma

Tim (12:10'da), FileInfo sınıfını kullanarak bir dosya hakkında detaylı bilgileri nasıl alacağını gösteriyor. Bu, dosya boyutunu, en son erişim zamanını, oluşturulma zamanını ve diğer öznitelikleri almayı içerir.

foreach (string file in files)
{
    FileInfo info = new FileInfo(file);
    Console.WriteLine($"{Path.GetFileName(file)}: {info.Length} bytes");
}
foreach (string file in files)
{
    FileInfo info = new FileInfo(file);
    Console.WriteLine($"{Path.GetFileName(file)}: {info.Length} bytes");
}

Bu kod parçacığı, dosya adını ve bayt cinsinden boyutunu yazdırır. Tim, bu boyutu kilobayt veya megabayt olarak dönüştürebileceğinizi 1024'e sürekli olarak bölerek açıklıyor.

O, FileInfo sınıfının diğer kullanışlı özellikler sunduğunu da açıklar:

  • LastWriteTime: Dosyanın en son değiştirildiği zaman.

  • LastAccessTime: Dosyanın en son erişildiği zaman.

  • CreationTime: Dosyanın oluşturulma zamanı.

  • Attributes: Dosya nitelikleri, örneğin salt okunur veya arşivleme gibi.

C# ile Dosya Sistemi Görevlerini Otomatikleştirme

Tim 15:11'de çeşitli dosya sistemi görevlerini otomatikleştirmek için C#'ın nasıl kullanılacağını tartışıyor. Bu, dizin oluşturmayı, dosya veya dizinlerin varlığını doğrulamayı ve diğer tekrarlayan görevleri içerebilir.

Dizinin Var Olup Olmadığını Doğrulama

Tim, bir dizinin mevcut olup olmadığını kontrol etmenin yolunu Directory.Exists yöntemi ile gösteriyor. Bu, gerekli dizinlerin işlemlerden önce yerinde olduğundan emin olmak için kullanışlıdır.

string newPath = @"C:\temp\demos\filesystem\subfolderC";
if (Directory.Exists(newPath))
{
    Console.WriteLine("Directory exists");
}
else
{
    Console.WriteLine("Directory does not exist");
}
string newPath = @"C:\temp\demos\filesystem\subfolderC";
if (Directory.Exists(newPath))
{
    Console.WriteLine("Directory exists");
}
else
{
    Console.WriteLine("Directory does not exist");
}

Bu kod, bir dizinin varlığını kontrol eder ve uygun bir mesaj yazdırır.

Yeni Bir Dizin Oluşturma

Tim, bir dizinin nasıl oluşturulacağını Directory.CreateDirectory yöntemi ile açıklar. Bu yöntem, belirtilen yolda henüz mevcut değilse, tüm dizinleri ve alt dizinleri oluşturur.

string newPath = @"C:\temp\demos\filesystem\subfolderC\sub-subfolderD";
Directory.CreateDirectory(newPath);
Console.WriteLine("Directories created");
string newPath = @"C:\temp\demos\filesystem\subfolderC\sub-subfolderD";
Directory.CreateDirectory(newPath);
Console.WriteLine("Directories created");

Tim, bu yöntemin belirtilen yol ve alt dizinleri, mevcut dosyaları veya dizinleri üzerine yazmadan oluşturduğunu gösterir.

Dosyaları Kopyalama

Tim (21:35'te), dosyaların bir dizinden diğerine nasıl kopyalanacağını File.Copy yöntemi ile gösteriyor. Bu, dosyaları yedeklemek veya farklı klasörlere organize etmek için kullanışlı olabilir.

string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");

foreach (string file in files)
{
    string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
    File.Copy(file, destFile, true);
}
string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");

foreach (string file in files)
{
    string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
    File.Copy(file, destFile, true);
}

Bu örnekte, dosyalar kök dizinden subfolderA'e kopyalanıyor ve mevcut dosyalar true parametresi nedeniyle üzerine yazılıyor.

Kopyalama Sırasında Dosyaları Yeniden Adlandırma

Tim ayrıca, bir döngü ve bir indeks kullanarak kopyalama işlemi sırasında dosyaları nasıl yeniden adlandıracağınızı gösterir.

for (int i = 0; i < files.Length; i++)
{
    string destFile = Path.Combine(destinationFolder, $"{i}.txt");
    File.Copy(files[i], destFile, true);
}
for (int i = 0; i < files.Length; i++)
{
    string destFile = Path.Combine(destinationFolder, $"{i}.txt");
    File.Copy(files[i], destFile, true);
}

Bu kod, dosyaları hedef dizine kopyalar ve onları 0.txt, 1.txt gibi sıralı olarak yeniden adlandırır.

Dosya Üzerine Yazmaları Yönetme

Tim, mevcut dosyaları üzerine yazmadan nasıl ele alacağını ve false parametresini ayarlayarak istisnalardan nasıl kaçınacağını açıklar. Bu, mevcut dosyaların üzerine yazılmasını engeller ve bir dosya zaten varsa bir istisna atar.

try
{
    File.Copy(sourceFile, destFile, false);
}
catch (IOException ex)
{
    Console.WriteLine($"File already exists: {ex.Message}");
}
try
{
    File.Copy(sourceFile, destFile, false);
}
catch (IOException ex)
{
    Console.WriteLine($"File already exists: {ex.Message}");
}

Bu yaklaşım, dosya kopyalarını güvende yönetmeye ve dosyaların üzerine yazılmaması gereken durumları ele almaya yardımcı olur.

Dosyaları Taşıma

Tim (28:28'de), dosyaların File.Move yöntemi ile nasıl taşınacağını gösteriyor. File.Copy'den farklı olarak, File.Move yöntemi bir üzerine yazma seçeneğine sahip değildir ve eğer hedef dosya zaten mevcutsa bir hata fırlatacaktır.

string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");

foreach (string file in files)
{
    string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
    File.Move(file, destFile);
}
string[] files = Directory.GetFiles(rootPath);
string destinationFolder = Path.Combine(rootPath, "subfolderA");

foreach (string file in files)
{
    string destFile = Path.Combine(destinationFolder, Path.GetFileName(file));
    File.Move(file, destFile);
}

Bu kod, dosyaları kök dizinden subfolderA'e taşır ve kaynak dizinden kaldırır.

Yardımcı Uygulamalar Oluşturma

Tim, geliştiricileri C# kullanarak dosya sistemi görevlerini otomatikleştirmek ve yardımcı uygulamalar oluşturmak için çeşitli yollar düşünmeye teşvik eder. Basit görevlerle başlamayı ve kademeli olarak daha karmaşık otomasyon çözümleri oluşturmayı önerir.

Yardımcı uygulama örnekleri:

  • Geçici Dosyaları Temizleme: Alan boşaltmak için geçici dosyaları silme işlemini otomatikleştirin.

  • Harici Sürücülere Yedekleme: Önemli dosyaları bir harici sürücüye kopyalayan bir yedekleme aracı oluşturun.

  • Proje Klasörü Senkronizasyonu: En son değişikliklerin her zaman yedeklenip geri yüklendiğinden emin olarak bir bilgisayar ile bir başparmak sürücü arasında proje klasörlerini senkronize edin.

Sonuç

Tim Corey'in C#'da dosya sistemi işlemlerini keşfi, dosya görevlerini otomatikleştirmek ve dizinleri yönetmek konusunda pratik bilgiler sunar. Onun örneklerini takip ederek, geliştiriciler rutin dosya yönetim görevlerini verimli bir şekilde otomatikleştirebilir ve özel yardımcı uygulamalar oluşturabilir.

Bu kavramları daha derinlemesine anlamak ve uygulamalı olarak görmek için Tim Corey'in C#'ta Dosya Sistemi üzerine hazırladığı videoyu izlemenizi şiddetle tavsiye ederiz. Onun ayrıntılı anlatımları ve pratik örnekleri, anlayışınızı pekiştirmenize ve kendi dosya yönetim uygulamalarınızı oluşturmanıza olanak tanır.

Hero Worlddot related to C# Sistem Dosyası Uzmanlaşma
Hero Affiliate related to C# Sistem Dosyası Uzmanlaşma

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js üzerinde çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara