Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Accede a archivos y carpetas en una carpeta, biblioteca, dispositivo o ubicación de red. También puede consultar los archivos y carpetas en una ubicación mediante la construcción de consultas de archivos y carpetas.
Para obtener instrucciones sobre cómo almacenar los datos de la aplicación WinUI, consulte la clase ApplicationData .
Nota:
Para obtener un ejemplo completo, consulte el ejemplo de enumeración de Folder.
Prerrequisitos
Descripción de la programación asincrónica para aplicaciones WinUI
Puede aprender a escribir aplicaciones asincrónicas en C#, consulte Llamada a API asincrónicas en C# o Visual Basic. Para obtener información sobre cómo escribir aplicaciones asincrónicas en C++/WinRT, consulte Operaciones asincrónicas y simultaneidad con C++/WinRT.
Permisos de acceso a la ubicación
Por ejemplo, el código de estos ejemplos requiere la funcionalidad picturesLibrary, pero la ubicación puede requerir una funcionalidad diferente o ninguna funcionalidad. Para más información, consulte Permisos de acceso a archivos.
Enumerar archivos y carpetas en una ubicación
Nota:
Recuerde declarar la funcionalidad picturesLibrary.
En este ejemplo se usa primero el método StorageFolder.GetFilesAsync para obtener todos los archivos de la carpeta raíz de KnownFolders.PicturesLibrary (no en subcarpetas) y enumerar el nombre de cada archivo. A continuación, usamos el método StorageFolder.GetFoldersAsync para obtener todas las subcarpetas de PicturesLibrary y enumerar el nombre de cada subcarpeta.
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:
En C#, recuerde colocar la palabra clave async en la declaración de método de cualquier método en el que use el operador await.
Como alternativa, puede usar el método StorageFolder.GetItemsAsync para obtener todos los elementos (archivos y subcarpetas) en una ubicación determinada. En el ejemplo siguiente se usa el método GetItemsAsync para obtener todos los archivos y subcarpetas de la carpeta raíz de KnownFolders.PicturesLibrary (no en subcarpetas). A continuación, en el ejemplo se muestra el nombre de cada archivo y subcarpeta. Si el elemento es una subcarpeta, el ejemplo añade "folder" al nombre.
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());
}
}
Consulta de archivos en una ubicación y enumeración de archivos coincidentes
En este ejemplo se consultan todos los archivos de KnownFolders.PicturesLibrary agrupados por mes y, esta vez, el ejemplo se repite en subcarpetas. En primer lugar, llamamos a StorageFolder.CreateFolderQuery y pasamos el valor CommonFolderQuery.GroupByMonth al método . Esto nos proporciona un objeto StorageFolderQueryResult .
A continuación, llamamos a StorageFolderQueryResult.GetFoldersAsync , que devuelve objetos StorageFolder que representan carpetas virtuales. En este caso, estamos agrupando por mes, por lo que las carpetas virtuales representan cada uno un grupo de archivos con el mismo mes.
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());
}
La salida del ejemplo es similar a la siguiente.
July 2015 (2)
MyImage3.png
MyImage4.png
December 2014 (2)
MyImage1.png
MyImage2.png