Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
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 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ć 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
Windows developer