Dostęp do danych i plików w aplikacjach Modern UI - Dostęp do plików krok po kroku  Udostępnij na: Facebook

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.