Dostęp do danych i plików w aplikacjach Modern UI - Dostęp do plików krok po kroku
Tłumaczenie na podstawie Quickstart: Accessing files programmatically (Modern UI style apps using C#/VB/C++ and XAML): Konrad Bojarczuk
Opublikowano: 2012-07-18
W tym odcinku dowiesz się, jak uzyskać dostęp do plików i folderów, które znajdują się w takich miejscach jak: folder, biblioteka, urządzenie czy lokalizacja sieciowa.
Wymagania:
- musisz rozumieć asynchroniczne programowanie aplikacji Modern UI w C# i Visual Basic – jeśli chcesz dowiedzieć się, jak pisać asynchroniczne aplikacje, zobacz Quickstart: Using the await operator for asynchronous programming,
- uprawnieniadostępu do lokalizacji – kod w poniższych przykładach wymaga dostępu do biblioteki dokumentów, ale Twoja lokalizacja może również dodatkowo zażądać innych uprawnień dostępu. W celu uzyskania szczegółowych informacji na ten temat, zobacz File access and permissions for Modern UI style apps. Jeśli chcesz dowiedzieć się o przeglądarce plików, zobacz Dostęp do plików przy użyciu przeglądarki.
Sprawdź wszystkie pliki i foldery w lokalizacji
W poniższym przykładzie użyto metodę StorageFolder.GetFilesAsync, aby uzyskać listę wszystkich plików w systemowej bibliotece zdjęć, a następnie wyświetlić nazwę każdego pliku. Przykład używa metody GetFoldersAsync, aby wyświetlić nazwy wszystkich folderów w bibliotece zdjęć:
StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
StringBuilder outputText = new StringBuilder();
IReadOnlyList<StorageFile> fileList =
await picturesFolder.GetFilesAsync();
outputText.AppendLine("Files:");
foreach (StorageFile file in fileList)
{
outputText.Append(file.Name + "\n");
}
IReadOnlyList<StorageFolder> folderList =
await picturesFolder.GetFoldersAsync();
outputText.AppendLine("Folders:");
foreach (StorageFolder folder in folderList)
{
outputText.Append(folder.DisplayName + "\n");
}
Dim picturesFolder As StorageFolder = KnownFolders.PicturesLibrary
Dim outputText As New StringBuilder
Dim fileList As IReadOnlyList(Of StorageFile) =
Await picturesFolder.GetFilesAsync()
outputText.AppendLine("Files:")
For Each file As StorageFile In fileList
outputText.Append(file.Name & vbLf)
Next file
Dim folderList As IReadOnlyList(Of StorageFolder) =
Await picturesFolder.GetFoldersAsync()
outputText.AppendLine("Folders:")
For Each folder As StorageFolder In folderList
outputText.Append(folder.DisplayName & vbLf)
Next folder
Uwaga! Pamiętaj, aby umieścić słowo klucz async w deklaracji metody, w której używasz operatora await. W celu uzyskania więcej informacji, zobacz Quickstart: Using the await operator for asynchronous programming.
Alternatywnie, możesz użyć metody GetItemsAsync, aby uzyskać pliki i foldery w danej lokalizacji. W poniższym przykładzie, w celu uzyskania wszystkich plików i folderów w bibliotece zdjęć użyto metody GetItemsAsync. Następnie, pokazano, jak wyświetlić nazwę każdego pliku i folderu. Jeśli któraś z pozycji jest folderem, to do całej nazwy dodawany został prefiks „folder”:
C#
StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
StringBuilder outputText = new StringBuilder();
IReadOnlyList<IStorageItem> itemsList =
await picturesFolder.GetItemsAsync();
foreach (var item in itemsList)
{
if (item is StorageFolder)
{
outputText.Append(item.Name + " folder\n");
}
else
{
outputText.Append(item.Name + "\n");
}
}
VB
Dim picturesFolder As StorageFolder = KnownFolders.PicturesLibrary
Dim outputText As New StringBuilder
Dim itemsList As IReadOnlyList(Of IStorageItem) =
Await picturesFolder.GetItemsAsync()
For Each item In itemsList
If TypeOf item Is StorageFolder Then
outputText.Append(item.Name & " folder" & vbLf)
Else
outputText.Append(item.Name & vbLf)
End If
Next item
Pliki zapytania w lokalizacji i wyliczanie
Poniższy przykład pobiera pliki z biblioteki plików i grupuje je według miesiąca. Następnie, tworzy obiekt StorageFolderQueryResult poprzez wywołanie StorageFolder.CreateFolderQuery i przekazanie wartości CommonFolderQuery.GroupByMonth do metody. Później wywołuje StorageFolderQueryResult.GetFoldersAsync. Wynikami GetFoldersAsync są wirtualne foldery (obiekty StorageFolder), które bazują na CommonFolderQuery, razem z plikami w bibliotece obrazów i podfolderami pogrupowanymi w tych wirtualnych folderach:
StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
StorageFolderQueryResult queryResult =
picturesFolder.CreateFolderQuery(CommonFolderQuery.GroupByMonth);
IReadOnlyList<StorageFolder> folderList =
await queryResult.GetFoldersAsync();
StringBuilder outputText = new StringBuilder();
foreach (StorageFolder folder in folderList)
{
IReadOnlyList<StorageFile> fileList = await folder.GetFilesAsync();
// Print the month and number of files in this group.
outputText.AppendLine(folder.Name + " (" + fileList.Count + ")");
foreach (StorageFile file in fileList)
{
// Print the name of the file.
outputText.AppendLine(" " + file.Name);
}}
Dim picturesFolder As StorageFolder = KnownFolders.PicturesLibrary
Dim outputText As New StringBuilder
Dim queryResult As StorageFolderQueryResult =
picturesFolder.CreateFolderQuery(CommonFolderQuery.GroupByMonth)
Dim folderList As IReadOnlyList(Of StorageFolder) =
Await queryResult.GetFoldersAsync()
For Each folder As StorageFolder In folderList
Dim fileList As IReadOnlyList(Of StorageFile) =
Await folder.GetFilesAsync()
' Print the month and number of files in this group.
outputText.AppendLine(folder.Name & " (" & fileList.Count & ")")
For Each file As StorageFile In fileList
' Print the name of the file.
outputText.AppendLine(" " & file.Name)
Next file
Next folder
Uwaga! Pamiętaj, by umieścić słowo klucz async w deklaracji metody, w której używasz operatora await. W celu uzyskania więcej informacji, zobacz Quickstart: Using the await operator for asynchronous programming.
Przykładowy wyniki powinien wyglądać podobnie do poniższego:
February 2012 (2)
MyImage3.png
MyImage4.png
November 2011 (2)
MyImage1.png
MyImage2.png
Podsumowanie i kolejne kroki
Jeśli chciałbyś dowiedzieć się więcej na temat zapisu i odczytu plików, zapoznaj się z artykułem Szybki Start: Odczyt i zapis pliku. W celu uzyskania bardziej szczegółowych informacji na temat dostępu do plików poprzez przeglądarkę, zobacz Dostęp do plików przy użyciu przeglądarki.