Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aplikacje WinUI mogą uzyskiwać dostęp do plików i folderów, używając interfejsów API Windows Runtime (WinRT) do typowych operacji na plikach. W tym artykule pokazano, jak uzyskiwać dostęp do plików i folderów, wysyłać zapytania do bibliotek systemowych, pobierać właściwości plików i pracować z lokalizacjami, takimi jak Obrazy i Dokumenty.
Podczas tworzenia spakowanych aplikacji WinUI można użyć interfejsów API WinRT aby uzyskać dostęp 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 .NET.
Ten artykuł koncentruje się na interfejsach API WinRT storage 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ć interfejsów API StorageFolder i StorageFile do przeszukiwania biblioteki Dokumenty w poszukiwaniu 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 zmodyfikowanej 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 Pictures i wykorzystania zdarzenia DefinitionChanged do odbierania powiadomień po zaktualizowaniu biblioteki. 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
Uzyskaj dostęp do plików i folderów za pomocą interfejsów API Windows App SDK i .NET