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.
Yorum Yap