Bahasa

Menghitung dan mengkueri file dan folder

Akses file dan folder di folder, pustaka, perangkat, atau lokasi jaringan. Anda juga dapat mengkueri file dan folder di lokasi dengan membuat kueri file dan folder.

Untuk panduan tentang cara menyimpan data aplikasi WinUI Anda, lihat kelas ApplicationData .

Nota

 Untuk contoh lengkap, lihat Contoh enumerasi folder.

Prasyarat

Menghitung file dan folder di lokasi

Nota

 Ingatlah untuk mendeklarasikan kemampuan picturesLibrary.

Dalam contoh ini, pertama-tama kita menggunakan metode StorageFolder.GetFilesAsync untuk mendapatkan semua file di folder akar KnownFolders.PicturesLibrary (bukan dalam subfolder) dan mencantumkan nama setiap file. Selanjutnya, kita menggunakan metode StorageFolder.GetFoldersAsync untuk mendapatkan semua subfolder di PicturesLibrary dan mencantumkan nama setiap subfolder.

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");
}
// MainPage.h
// In MainPage.xaml: <TextBlock x:Name="OutputTextBlock"/>
#include <winrt/Windows.Storage.h>
#include <sstream>
...
Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
{
    // Be sure to specify the Pictures Folder capability in your Package.appxmanifest.
    Windows::Storage::StorageFolder picturesFolder{
        Windows::Storage::KnownFolders::PicturesLibrary()
    };

    std::wstringstream outputString;
    outputString << L"Files:" << std::endl;

    for (auto const& file : co_await picturesFolder.GetFilesAsync())
    {
        outputString << file.Name().c_str() << std::endl;
    }

    outputString << L"Folders:" << std::endl;
    for (auto const& folder : co_await picturesFolder.GetFoldersAsync())
    {
        outputString << folder.Name().c_str() << std::endl;
    }

    OutputTextBlock().Text(outputString.str().c_str());
}

Nota

Di C#, ingatlah untuk meletakkan kata kunci asinkron dalam deklarasi metode apa pun di mana Anda menggunakan operator tunggu.

Atau, Anda dapat menggunakan metode StorageFolder.GetItemsAsync untuk mendapatkan semua item (file dan subfolder) di lokasi tertentu. Contoh berikut menggunakan metode GetItemsAsync untuk mendapatkan semua file dan subfolder di folder akar KnownFolders.PicturesLibrary (bukan dalam subfolder). Kemudian contoh mencantumkan nama setiap file dan subfolder. Jika item adalah subfolder, contoh menambahkan "folder" ke nama.

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");
    }
}
// MainPage.h
// In MainPage.xaml: <TextBlock x:Name="OutputTextBlock"/>
#include <winrt/Windows.Storage.h>
#include <sstream>
...
Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
{
    // Be sure to specify the Pictures Folder capability in your Package.appxmanifest.
    Windows::Storage::StorageFolder picturesFolder{
        Windows::Storage::KnownFolders::PicturesLibrary()
    };

    std::wstringstream outputString;

    for (Windows::Storage::IStorageItem const& item : co_await picturesFolder.GetItemsAsync())
    {
        outputString << item.Name().c_str();

        if (item.IsOfType(Windows::Storage::StorageItemTypes::Folder))
        {
            outputString << L" folder" << std::endl;
        }
        else
        {
            outputString << std::endl;
        }

        OutputTextBlock().Text(outputString.str().c_str());
    }
}

Memeriksa file di lokasi dan mendaftar file yang sesuai

Dalam contoh ini, kita melakukan kueri untuk semua file di KnownFolders.PicturesLibrary yang dikelompokkan menurut bulan, dan kali ini contoh ini secara rekursif masuk ke dalam subfolder. Pertama, kita memanggil StorageFolder.CreateFolderQuery dan meneruskan nilai CommonFolderQuery.GroupByMonth ke metode . Itu memberi kita objek StorageFolderQueryResult .

Selanjutnya kita memanggil StorageFolderQueryResult.GetFoldersAsync yang mengembalikan objek StorageFolder yang mewakili folder virtual. Dalam hal ini kita mengelompokkan menurut bulan, sehingga folder virtual masing-masing mewakili sekelompok file dengan bulan yang sama.

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);
    }
}
// MainPage.h
// In MainPage.xaml: <TextBlock x:Name="OutputTextBlock"/>
#include <winrt/Windows.Storage.h>
#include <winrt/Windows.Storage.Search.h>
#include <sstream>
...
Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
{
    // Be sure to specify the Pictures Folder capability in your Package.appxmanifest.
    Windows::Storage::StorageFolder picturesFolder{
        Windows::Storage::KnownFolders::PicturesLibrary()
    };

    Windows::Storage::Search::StorageFolderQueryResult queryResult{
        picturesFolder.CreateFolderQuery(Windows::Storage::Search::CommonFolderQuery::GroupByMonth)
    };

    std::wstringstream outputString;

    for (Windows::Storage::StorageFolder const& folder : co_await queryResult.GetFoldersAsync())
    {
        auto files{ co_await folder.GetFilesAsync() };
        outputString << folder.Name().c_str() << L" (" << files.Size() << L")" << std::endl;

        for (Windows::Storage::StorageFile const& file : files)
        {
            outputString << L"    " << file.Name().c_str() << std::endl;
        }
    }

    OutputTextBlock().Text(outputString.str().c_str());
}

Output contoh terlihat mirip dengan sebagai berikut.

July ‎2015 (2)
   MyImage3.png
   MyImage4.png
‎December ‎2014 (2)
   MyImage1.png
   MyImage2.png