Aracılığıyla paylaş


WinUI ve WinRT API'leri ile dosya ve klasörlere erişme

WinUI uygulamaları, yaygın dosya işlemleri için Windows Çalışma Zamanı (WinRT) API'lerini kullanarak dosya ve klasörlere erişebilir. Bu makalede dosya ve klasörlere erişme, sistem kitaplıklarını sorgulama, dosya özelliklerini alma ve Resimler ve Belgeler gibi konumlarla çalışma işlemleri gösterilir.

Paketlenmiş WinUI uygulamaları oluşturduğunuzda, belirli konumlardaki dosya ve klasörlere erişmek için WinRT API'lerini kullanabilirsiniz. Bu API'ler uygulama ayarlarını okumanızı ve yazmanızı, dosya ve klasör seçicileri açmanızı ve Video ve Müzik kitaplıkları gibi korumalı konumlarla çalışmanızı sağlar. Ayrıca WinRT API'lerini Windows SDK'sından Win32 API'leri ve .NET SDK'sından API'ler ile birleştirebilirsiniz.

Bu makale WinRT depolama API'lerine odaklanır ve şunların nasıl yapılacağını gösterir:

  • Sistem kitaplıklarındaki dosya ve klasörleri sorgulama
  • Boyut ve değişiklik tarihi gibi temel dosya özelliklerini alma
  • Resimler kitaplığındaki değişiklikleri izleme

Dosya ve klasörleri sorgulama

Aşağıdaki örnekte, dosyalar ve klasörler için Belgeler kitaplığını sorgulamak için StorageFolder ve StorageFileAPI'lerinin nasıl kullanılacağı gösterilmektedir. Örnek, GetFilesInFolderAsync yöntemini kullanarak klasör yapısında özyinelemeli olarak yineleme yapar ve dosya adlarını bir StringBuilder nesnesine ekler.

using System.Text;
using Windows.Storage;
...
private async Task<string> GetDocumentsContentsAsync()
{
    StorageFolder docsFolder = KnownFolders.DocumentsLibrary;
    StringBuilder outputBuilder = new();
    await GetFilesInFolderAsync(docsFolder, outputBuilder);

    return outputBuilder.ToString();
}

private async Task GetFilesInFolderAsync(StorageFolder folder, StringBuilder outputBuilder)
{
    IReadOnlyList<IStorageItem> storageItem = await folder.GetItemsAsync();

    foreach (var item in storageItem)
    {
        if (item is StorageFolder)
        {
            await GetFilesInFolderAsync(item as StorageFolder, outputBuilder);
        }
        else
        {
            outputBuilder.AppendLine($"Found {item.Name} in folder {folder.Name}");
        }
    }
}

Temel dosya özelliklerini alma

Aşağıdaki örnek, önceki örnekteki GetFilesInFolderAsync yöntemini alır ve her dosya için değiştirilen dosya boyutunu ve tarihini alma özelliğini ekler. Örnek, her dosya için değiştirilen dosya boyutunu ve tarihi almak, dosya boyutunu biçimlendirmek ve her dosya ve klasör adından sonra nesneye değiştirilen boyutu ve tarihi eklemek için StringBuilder API'sini kullanır.

using System.Text;
using Windows.Storage;
using Windows.Storage.FileProperties;
...
private async Task GetFilesInFolderAsync(StorageFolder folder, StringBuilder outputBuilder)
{
    IReadOnlyList<IStorageItem> storageItem = await folder.GetItemsAsync();

    foreach (var item in storageItem)
    {
        if (item is StorageFolder)
        {
            await GetFilesInFolderAsync(item as StorageFolder, outputBuilder);
        }
        else
        {
            outputBuilder.AppendLine($"Found {item.Name} in folder {folder.Name}");

            // Append each file's size and date modified.
            BasicProperties basicProperties = await item.GetBasicPropertiesAsync();
            string fileSize = string.Format("{0:n0}", basicProperties.Size);
            outputBuilder.AppendLine($" - File size: {fileSize} bytes");
            outputBuilder.AppendLine($" - Date modified: {basicProperties.DateModified}");
        }
    }
}

Resimler Kütüphanesi ile Çalışma

Bu örnekte uygulama, Resimler kitaplığı güncelleştirildiğinde bildirim alacak şekilde yapılandırılmıştır. Örnek, Resimler kitaplığını almak için StorageLibrary API'sini ve kitaplık güncelleştirildiğinde bildirim almak için DefinitionChanged olayını kullanır. Geçerli DefinitionChanged kitaplıktaki klasör listesi değiştiğinde olay tetiklenir. Örnek, Folders kitaplığındaki klasörleri dolaşmak için kitaplığın özelliğini kullanır ve klasör adını konsola yazar.

using Windows.Storage;
...
private async Task Configure()
{
    StorageLibrary picturesFolder = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Pictures);
    picturesFolder.DefinitionChanged += picturesFolder_DefinitionChanged;
}
private void picturesFolder_DefinitionChanged(StorageLibrary sender, object args)
{
    foreach (StorageFolder item in sender.Folders)
    {
        Console.WriteLine($"Folder {item.Name} found.");
    }
}

Ayrıca bakınız

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

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