Zugreifen auf Dateien und Ordner mit Windows App SDK und WinRT-APIs
Verpackte Windows App SDK-Apps können WinRT-APIs zum Lesen und Schreiben von App-Einstellungen, zur Datei- und Ordnerauswahl und zu speziellen Speicherorten im Sandkasten verwenden, wie z. B. Video-/Musikbibliothek. Darüber hinaus kann jede verpackte Desktop-App sowohl WinRT- als auch Win32-APIs im Windows SDK sowie die im .NET SDK bereitgestellten APIs verwenden. Dieser Artikel enthält Anleitungen zum Verwenden der WinRT-Speicher-APIs zum Abfragen von Dateien und Ordnern, zum Abrufen von Dateieigenschaften und zum Arbeiten mit der Bilder-Bibliothek.
Abfragen von Dateien und Ordnern
Das folgende Beispiel zeigt, wie Sie die StorageFolder- und StorageFile-APIs verwenden, um die Dokumenten-Bibliothek nach Dateien und Ordnern abzufragen. Im Beispiel wird die GetFilesInFolderAsync
-Methode verwendet, um die Ordnerstruktur rekursiv zu durchlaufen und die Dateinamen an ein StringBuilder
-Objekt anzufügen.
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}");
}
}
}
Grundlegende Dateieigenschaften abrufen
Im folgenden Beispiel wird die GetFilesInFolderAsync
-Methode aus dem vorherigen Beispiel verwendet und die Möglichkeit hinzugefügt, die Dateigröße und das geänderte Datum für jede Datei abzurufen. Im Beispiel wird die BasicProperties-API verwendet, um die Dateigröße und das geänderte Datum für jede Datei abzurufen, die Dateigröße zu formatieren und nach jedem Datei- und Ordnernamen die Größe und das geänderte Datum an das StringBuilder
-Objekt anzufügen.
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}");
}
}
}
Arbeiten mit der Bilder-Bibliothek
In diesem Beispiel ist die App so konfiguriert, dass sie Benachrichtigungen empfängt, wenn die Bilder-Bibliothek aktualisiert wird. Im Beispiel wird die StorageLibrary-API verwendet, um die Bilder-Bibliothek und das DefinitionChanged-Ereignis abzurufen, um Benachrichtigungen zu empfangen, wenn die Bibliothek aktualisiert wird. Das DefinitionChanged
-Ereignis wird aufgerufen, wenn sich die Liste der Ordner in der aktuellen Bibliothek ändert. Im Beispiel wird die Folders
-Eigenschaft der Bibliothek verwendet, um die Ordner in der Bilder-Bibliothek zu durchlaufen und den Ordnernamen in die Konsole zu schreiben.
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.");
}
}
Siehe auch
Zugreifen auf Dateien und Ordner mit Windows App SDK und .NET-APIs
Windows developer