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

Diğer Kategoriler

C# Sistem Dosyasını Ustalaşmak

[[academy-video-youtube({"vid": "9mUuJIKq40M", "start_time": "0", "title": "Mastering C# System File", "creator": "Tim Corey", "length": "35m 07s"})]]

C#, dosya sistemiyle etkileşim kurmak için sağlam yetenekler sağlar; dosya manipülasyonu, dizin yönetimi ve bilgi alma gibi görevleri mümkün kılar. Tim Corey, "Working With The File System in C# - Managing Folders and Files" başlıklı videosunda C# kullanarak dosyalar ve dizinlerle çalışma temellerini inceler.

Bu makale, C#'daki dosya sistemi işlemlerine genel bir bakış sağlamayı ve görevlerin otomasyonunu, dizinlerin yönetimini ve dosyaların ele alınmasını vurgulamayı amaçlar.

Giriş

C#'ta, System.IO ad alanı dosya sistemiyle etkileşim kurmak için güçlü sınıflar sağlar. Bu sınıflar, File, FileInfo, Directory ve DirectoryInfo gibi, dosya oluşturma, verileri okuma, dosyalara yazma ve belirtilen bir yolda belirtilen bir dosyanın zaten mevcut olup olmadığını kontrol etme gibi çeşitli dosya işlemleri yapmanızı sağlar. Bu sınıfları kullanarak, metin dosyaları, ikili dosyalar ve çeşitli uzantılı dosyalarla çalışabilirsiniz. Create(), Exists() ve Delete() gibi yöntemler, geliştiricilerin dosyaları ve dizinleri etkili bir şekilde yönetmelerine olanak tanır.

Örneğin, File sınıfı, bir dosyanın zaten mevcut olup olmadığını kontrol etmek, yeni bir dosya oluşturmak veya farklı modlarda (okuma, yazma veya ekleme gibi) dosya açmak için statik yöntemler içerir. FileInfo sınıfını kullanarak bir dosya hakkında daha fazla ayrıntı, örneğin oluşturulma zamanı veya tam yolunu 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 yöntemler, mevcut dosyalar ve yeni dosyaları ele almak, birden fazla dosyayı yönetmek ve hatta bayt düzeyinde dosya verilerini işlemek için esneklik sağlar, bu da C#'ı dosya sistemi işlemleri için güçlü bir araç haline getirir.

Tim, C#'ın dosya görevlerini otomatikleştirmek için güçlü özelliklerini, yedekleme oluşturma, dosyaları düzenleme ve dosya bilgilerini alma gibi örneklerle vurgulayarak başlar. Pratik örnekler ve eğitim kaynakları ile C# öğrenmeyi kolaylaştırma amacını belirterek videoyu tanıtır.

Bir Demo Konsol Uygulaması Oluşturma

Tim, .NET Framework kullanarak "FileSystemDemo" adlı yeni bir konsol uygulaması oluşturarak işe sıfırdan başlar. Bu gösterim için .NET Core yerine .NET Framework'ü tercih ettiğini 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 Yolunu Ayarlama

Tim, demoyu için sistemindeki belirli bir dizine işaret eden bir kök yol değişkeni ayarlıyor.

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

@ sembolünün, yolda geriye eğik çizgilerin kaçış karakteri olmadan kullanılmasına izin verdiğini açıklıyor.

Yoldaki Tüm Dizinleri Okuma

Tim, belirtilen kök yolda tüm dizinlerin nasıl alınacağını, Directory.GetDirectories yöntemi kullanarak 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 dizindeki tüm alt dizinlerin tam yollarını yazdırır.

Dizin Listesi

Alt Dizinleri Özyinelemeli Olarak Okuma

Aramaya alt dizinleri dahil etmek için Tim, arama desenini ve arama seçeneklerini GetDirectories yöntemine ekliyor.

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, aramanın tüm iç içe alt dizinleri dahil etmesini sağlar.

Yoldaki Tüm Dosyaları Okuma

Tim, dizin sınıfı ve belirtilen kök yoldaki tüm dosyaların nasıl alınacağını, Directory.GetFiles yöntemi kullanarak 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 dizinlerindeki tüm dosyaların tam yollarını yazdırır.

Dosya Listesi

Dosya Adlarını ve Yollarını Çıkarma

Tim, dosya adlarını ve yollarını çıkarmak için Path sınıfını nasıl kullanacağınızı açıklıyor. Bu, dosya uzantısı olmadan dosya adını ve her dosyanın dizin adını almayı 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ığı, belirtilen yoldaki aynı dosyanın farklı bölümlerini nasıl çıkaracağınızı ve yazdıracağınızı gösterir.

Dosya Bilgilerini Alma

Tim, (12:10) FileInfo sınıfını kullanarak bir dosya hakkında ayrıntılı bilgilerin nasıl alınacağını gösteriyor. Bu, dosya boyutunu, son erişim zamanını, oluşturulma zamanını ve diğer niteliklerini 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ı ve boyutunu bayt olarak yazdırır. Tim, bu boyutu tekrar tekrar 1024'e bölerek kilobayt veya megabayt cinsinden dönüştürebileceğinizi belirtir.

FileInfo sınıfının başka kullanışlı özellikler sağladığını daha ayrıntılı açıklıyor:

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

  • LastAccessTime: Dosyanın son erişilme zamanı.

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

  • Attributes: Dosya öznitelikleri, örneğin salt okunur veya arşiv.

Automating File System Tasks with C

Tim (15:11)'de C#'ı kullanarak çeşitli dosya sistemi görevlerini otomatikleştirme yöntemlerini tartışır. Bu, dizin oluşturmayı, dosyaların veya dizinlerin varlığını doğrulamayı ve diğer tekrar eden görevleri içerebilir.

Bir Dizin Var Mı Doğrulama

Tim, Directory.Exists yöntemi kullanarak bir dizinin mevcut olup olmadığını nasıl kontrol edeceğinizi gösteriyor. Bu, operasyonlar gerçekleştirmeden önce gerekli dizinlerin varlığını garanti etmek için faydalı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, Directory.CreateDirectory yöntemi kullanarak yeni bir dizin nasıl oluşturulacağını açıklıyor. Bu yöntem, belirtilen yolda zaten yoksa 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 belirtilmiş olan yol ve alt dizinleri var olan herhangi bir dosya veya dizin üzerine yazmadan oluşturduğunu gösteriyor.

Dosyaları Kopyalama

Tim, (21:35) File.Copy yöntemi kullanarak dosyaların bir dizinden diğerine nasıl kopyalanacağını gösteriyor. Bu, dosyaları yedeklemek veya farklı klasörlere dosya düzenlemek için faydalı 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'a kopyalanır ve var olan dosyalar true parametresi sayesinde üzerine yazılır.

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

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

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 isimlerini sırasıyla 0.txt, 1.txt vb. olarak yeniden adlandırır.

Dosya Üzerine Yazmayı Yönetme

Tim, mevcut dosyaları üzerine yazmadan nasıl yönetileceğini ve istisnalardan nasıl kaçınılacağını false parametresini ayarlayarak açıklıyor. Bu, var olan dosyaların üzerine yazılmasını önler 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üvenli bir şekilde yönetmeye ve dosyaların üzerine yazılmaması gerektiği durumlardan kaçınmaya yardımcı olur.

Dosya Taşıma

Tim, (28:28) File.Move yöntemi kullanarak dosyaların 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 hedef dosya zaten mevcutsa bir istisna atar.

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'a taşır ve kaynak dizinden kaldırır.

Yardımcı Uygulamalar Oluşturma

Tim, geliştiricileri C#'ı 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 giderek daha karmaşık otomasyon çözümleri geliştirmeyi önerir.

Yardımcı uygulama örnekleri:

  • Geçici Dosyaları Temizleme: Geçici dosyaları silme sürecini otomatikleştirerek boş alan yaratın.

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

  • Proje Klasörü Eşitleme: Bilgisayar ve genişletilmiş sürücü arasında proje klasörlerini senkronize edin, böylece en son değişikliklerin her zaman yedeklenip geri yüklendiğinden emin olun.

Sonuç

Tim Corey'nin C#'taki dosya sistemi işlemlerinin keşfi, dosya görevlerinin otomasyonunu ve dizin yönetimini içerecek pratik içgörüler sunar. Ö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ın derinlemesine anlaşılması ve eylemde görülmesi için Tim Corey'nin videosunun tamamını izlemenizi şiddetle tavsiye ederim. Ayrıntılı buraya yürüyüşler ve pratik örnekler, anlamanızı pekiştirmenize ve kendi dosya yönetimi uygulamalarınızı geliştirmenize yardımcı olacaktır.

Hero Worlddot related to C# Sistem Dosyasını Ustalaşmak
Hero Affiliate related to C# Sistem Dosyasını Ustalaşmak

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

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

Iron Destek Ekibi

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