Bagikan melalui


Akses file dan folder dengan API WinUI 3 dan WinRT

Aplikasi WinUI dapat mengakses file dan folder menggunakan API Windows Runtime (WinRT) untuk operasi berkas umum. Artikel ini memperlihatkan kepada Anda cara mengakses file dan folder, kueri pustaka sistem, mengakses properti file, dan mengelola lokasi seperti Gambar dan Dokumen.

Saat membuat aplikasi WinUI paket, Anda dapat menggunakan API WinRT untuk access file dan folder di lokasi tertentu. API ini memungkinkan Anda membaca dan menulis pengaturan aplikasi, membuka pemilih file dan folder, dan bekerja dengan lokasi berkotak pasir seperti pustaka Video dan Musik. Anda juga dapat menggabungkan API WinRT dengan API Win32 dari Windows SDK dan API dari SDK .NET.

Artikel ini berfokus pada API WinRT storage dan menunjukkan cara:

  • Mengkueri file dan folder di pustaka sistem
  • Mengambil properti file dasar seperti ukuran dan tanggal modifikasi
  • Memantau perubahan pada pustaka Gambar

Mengkueri file dan folder

Contoh berikut menunjukkan cara menggunakan API StorageFolder dan StorageFile untuk mengkueri pustaka Documents untuk file dan folder. Contoh menggunakan GetFilesInFolderAsync metode untuk berulang melalui struktur folder dan menambahkan nama file ke StringBuilder objek.

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}");
        }
    }
}

Mendapatkan properti file dasar

Contoh berikut mengambil GetFilesInFolderAsync metode dari contoh sebelumnya dan menambahkan kemampuan untuk mengambil ukuran file dan tanggal yang dimodifikasi untuk setiap file. Contoh menggunakan API BasicProperties untuk mengambil ukuran file dan tanggal yang dimodifikasi untuk setiap file, memformat ukuran file, dan menambahkan ukuran dan tanggal yang dimodifikasi ke objek StringBuilder setelah setiap nama file dan folder.

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}");
        }
    }
}

Bekerja dengan perpustakaan Gambar

Dalam contoh ini, aplikasi dikonfigurasi untuk menerima pemberitahuan saat pustaka Gambar diperbarui. Contohnya menggunakan API StorageLibrary untuk mengambil pustaka Pictures dan DefinitionChanged untuk menerima pemberitahuan saat pustaka diperbarui. Kejadian DefinitionChanged ini dipanggil ketika daftar folder di pustaka saat ini berubah. Contoh ini menggunakan properti Folders dari pustaka untuk melakukan iterasi melalui folder-folder di pustaka Pictures dan menuliskan nama folder ke konsol.

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.");
    }
}

Lihat juga

Mengakses berkas dan folder dengan Windows App SDK dan API .NET

File, folder, dan pustaka dengan Windows App SDK