Udostępnij przez


Uzyskiwanie dostępu do plików i folderów za pomocą interfejsów API WinUI i WinRT

Aplikacje WinUI mogą uzyskiwać dostęp do plików i folderów przy użyciu interfejsów API środowiska Uruchomieniowego systemu Windows (WinRT) na potrzeby typowych operacji na plikach. W tym artykule pokazano, jak uzyskiwać dostęp do plików i folderów, wykonywać zapytania o biblioteki systemowe, pobierać właściwości plików i pracować z lokalizacjami, takimi jak Obrazy i dokumenty.

Podczas tworzenia spakowanych aplikacji WinUI można używać interfejsów API WinRT do uzyskiwania dostępu do plików i folderów w określonych lokalizacjach. Te interfejsy API umożliwiają odczytywanie i zapisywanie ustawień aplikacji, otwieranie selektorów plików i folderów oraz pracę z lokalizacjami w trybie piaskownicy, takimi jak biblioteki wideo i muzyki. Interfejsy API WinRT można również łączyć z interfejsami API Win32 z zestawu Windows SDK i interfejsów API z zestawu SDK platformy .NET.

Ten artykuł koncentruje się na interfejsach API magazynu WinRT i pokazuje, jak:

  • Wykonywanie zapytań o pliki i foldery w bibliotekach systemowych
  • Pobieranie podstawowych właściwości pliku, takich jak rozmiar i data modyfikacji
  • Monitorowanie zmian w bibliotece obrazów

Wykonywanie zapytań o pliki i foldery

W poniższym przykładzie pokazano, jak używać StorageFolder i interfejsów API StorageFile do wykonywania zapytań dotyczących biblioteki dokumentów dla plików i folderów. W przykładzie użyto metody GetFilesInFolderAsync, aby rekursywnie iterować po strukturze folderów i dołączać nazwy plików do obiektu StringBuilder.

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

Uzyskiwanie podstawowych właściwości pliku

Poniższy przykład przyjmuje metodę GetFilesInFolderAsync z poprzedniego przykładu i dodaje możliwość pobierania rozmiaru pliku i daty modyfikacji dla każdego pliku. W tym przykładzie użyto interfejsu API BasicProperties w celu pobrania rozmiaru pliku i daty modyfikacji dla każdego pliku, formatuje rozmiar pliku oraz dołącza rozmiar i datę zmodyfikowaną do obiektu StringBuilder po każdej nazwie pliku i folderu.

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

Praca z biblioteką Obrazów

W tym przykładzie aplikacja jest skonfigurowana do odbierania powiadomień po zaktualizowaniu biblioteki Pictures. W przykładzie użyto interfejsu API StorageLibrary w celu pobrania biblioteki zdjęć oraz zdarzenia DefinitionChanged do otrzymywania powiadomień, gdy biblioteka jest aktualizowana. Zdarzenie DefinitionChanged jest wywoływane, gdy lista folderów w bieżącej bibliotece ulegnie zmianie. W przykładzie użyto właściwości Folders biblioteki do iterowania folderów w bibliotece Pictures i wyświetla nazwę folderu w konsoli.

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

Zobacz także

uzyskiwanie dostępu do plików i folderów za pomocą zestawu SDK aplikacji systemu Windows i interfejsów API platformy .NET

Pliki, foldery i biblioteki z Windows App SDK