Aracılığıyla paylaş


Windows Uygulama SDK'sı ve .NET ile dosya ve klasörlere erişme

Bu makalede, paketlenmiş WinUI uygulamalarında .NET API'lerini kullanarak dosya ve klasörlere nasıl eriştiğiniz gösterilmektedir. Dosyaları okumayı ve yazmayı, dizinleri ve sürücüleri yönetmeyi ve dize kodlama ve kod çözme için bellek akışlarıyla çalışmayı öğreneceksiniz.

WinUI uygulamaları, kapsamlı dosya sistemi erişimi sağlamak için WinRT ve Win32 API'lerinin yanı sıra .NET API'lerini kullanabilir. Bu makaledeki örnekler, dosya ve dizin işlemleri için temel işlevselliği sağlayan System.IO ad alanına odaklanır.

Önkoşullar

  • WinUI uygulama geliştirme iş yükü yüklü Visual Studio 2022
  • Paketlenmiş bir WinUI projesi
  • C# ve .NET geliştirme hakkında temel bilgiler

Ne öğreneceksiniz?

Bu makalede şunları yapmayı öğreneceksiniz:

.NET API'leri ile dosyaları okuma ve yazma

Aşağıdaki örnekte, ReadWriteFiles yeni bir dosya oluşturur, dosyaya bir tamsayı kümesi yazar ve ardından tamsayıları dosyadan geri okur. Örnek, yeni bir dosya oluşturmak ve dosyayı okumak veya yazmak üzere açmak için FileStream sınıfını kullanır. Örnek, dosyaya tamsayıları yazmak için BinaryWriter sınıfını ve dosyadan tamsayıları okumak için BinaryReader sınıfını kullanır.

using System.IO;
...
ReadWriteFiles("test.bin");
...
private void ReadWriteFiles(string fileName)
{
    if (File.Exists(fileName))
    {
        Console.WriteLine($"{fileName} already exists!");
        return;
    }

    using (FileStream fs = new(fileName, FileMode.CreateNew))
    {
        using BinaryWriter writer = new(fs);
        for (int i = 0; i < 11; i++)
        {
            writer.Write(i);
        }
    }

    using (FileStream fs = new(fileName, FileMode.Open, FileAccess.Read))
    {
        using BinaryReader reader = new(fs);
        for (int i = 0; i < 11; i++)
        {
            Console.WriteLine(reader.ReadInt32());
        }
    }
}

.NET'te sürücüleri ve klasörleri yönetme

Aşağıdaki örnekte, klasörleri oluşturmak, silmek ve yönetmek için DirectoryInfo ve Directory sınıflarının nasıl kullanılacağı gösterilmektedir. Örnek, sınıfını DirectoryInfo kullanarak yeni bir dizin oluşturur, bir alt dizin oluşturur ve dizini siler. DirectoryInfo sınıfı dizinler ve alt dizinler aracılığıyla oluşturma, taşıma ve numaralandırma yöntemleri sağlar. Directory sınıfı dizinleri ve alt dizinleri oluşturmak, taşımak ve numaralandırmak için statik yöntemler sağlar.

using System.IO;
...
private void FolderTest()
{
    FolderManagement(@"c:\MyDir", "Projects");
}
private void FolderManagement(string path, string subfolderName)
{
    DirectoryInfo di = new(path);
    try
    {
        // Create directory if it doesn't exist
        if (di.Exists)
        {
            Console.WriteLine("Path already exists.");
        }
        else
        {
            di.Create();
            Console.WriteLine("The directory was created successfully.");
        }

        // Create subdirectory if it doesn't exist
        string subfolderPath = Path.Combine(path, subfolderName);
        if (Directory.Exists(subfolderPath))
        {
            Console.WriteLine("Subfolder path already exists.");
        }
        else
        {
            di.CreateSubdirectory(subfolderName);
            Console.WriteLine("The subdirectory was created successfully.");
        }

        // Delete directory
        di.Delete(true);
        Console.WriteLine("The directory was deleted successfully.");
    }
    catch (Exception ex)
    {
        Console.WriteLine("The process failed: {0}", ex.ToString());
    }
}

Sistemdeki tüm sürücüler hakkında bilgi almak için statik GetDrives yöntemini kullanan bu örnek. DriveInfo sınıfı, sürücü türü, etiket, dosya sistemi ve kullanılabilir boş alan gibi bir sürücü hakkında bilgi sağlar.

using System.IO;
...
private void DriveManagement()
{
    DriveInfo[] drives = DriveInfo.GetDrives();

    foreach (DriveInfo d in drives)
    {
        Console.WriteLine($"Drive name: {d.Name}");
        Console.WriteLine($"  Drive type: {d.DriveType}");
        if (d.IsReady)
        {
            Console.WriteLine($"  Volume label: {d.VolumeLabel}");
            Console.WriteLine($"  File system type: {d.DriveFormat}");
            Console.WriteLine($"  Space available to user: {d.AvailableFreeSpace, 15} bytes");
            Console.WriteLine($"  Total available space: {d.TotalFreeSpace, 15} bytes");
            Console.WriteLine($"  Total size of drive: {d.TotalSize, 15} bytes ");
        }
    }
}

MemoryStream ile dizeleri kodlama ve kodunu çözme

Bu örnekte, dize verilerini kodlamak ve kodunu çözmek için MemoryStream sınıfının nasıl kullanılacağı gösterilmektedir. İlk olarak bir MemoryStream bellek akışına zaman uyumsuz olarak bir dize yazmak için bir oluşturur ve ardından dizeyi bellek akışından okur. Kodlama sınıfı, dizeyi bir bayt dizisine dönüştürmek ve ardından bayt dizisini bellek akışına yazmak için kullanılır. StreamReader, bellek akışından bayt dizisini zaman uyumsuz olarak okumak ve ardından ReadToEndAsyncçağrısını yaparak bayt dizisini tekrar bir dizeye dönüştürmek için kullanılır.

using System.IO;
using System.Text;
...
private async Task EncodeDecodeStringAsync(string inputData)
{
    using MemoryStream stream = new();
    var inputBytes = Encoding.UTF8.GetBytes(inputData);
    await stream.WriteAsync(inputBytes, 0, inputBytes.Length);
    stream.Seek(0, SeekOrigin.Begin);

    using StreamReader reader = new(stream);
    string text = await reader.ReadToEndAsync();
    Console.WriteLine(text);
}

Uyarı

.NET akışları ile WinRT akışları arasında dönüştürme hakkında bilgi için bkz . Nasıl yapılır: .NET ve Windows Çalışma Zamanı akışları arasında dönüştürme.

Ayrıca bakınız

Windows Uygulama SDK'sı ve WinRT API'leri ile dosya ve klasörlere erişme

Windows Uygulama SDK'sı ile dosyalar, klasörler ve kitaplıklar