Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте средства выбора файлов и папок пакета SDK для Windows, чтобы пользователи могут просматривать и выбирать файлы или папки в приложении WinUI. API выбора предоставляют знакомый интерфейс пользователя Windows, который помогает пользователям навигации по устройству и облачным хранилищам. В этой статье показано, как реализовать средства выбора файлов и средства выбора папок, настроить их поведение и обрабатывать выбранные результаты в приложении.
Классы FileOpenPicker и FileSavePicker для приложений Windows создают диалоговое окно выбора, позволяющее пользователям указать имя и расположение файла для открытия или сохранения. Класс FolderPicker позволяет выбрать папку.
Дополнительные сведения об использовании средства выбора для сохранения файлов см. в статье "Сохранение файла с помощью средства выбора пакета SDK для приложений Windows".
Важные API
В этой статье используются следующие API:
Пользовательский интерфейс средства выбора файлов
Средство выбора файлов отображает сведения для ориентации пользователей и обеспечивает согласованный интерфейс при открытии или сохранении файлов.
Эти сведения включают:
- Текущее расположение
- Элемент или элементы, выбранные пользователем
- Дерево расположений, к которым пользователь может перейти. К этим расположениям относятся такие элементы файловой системы, как папка "Музыка" или "Загрузки", а также приложения, реализующие контракт средства выбора файлов, например, "Камера", "Фотографии" и "Microsoft OneDrive".
Возможно, у вас есть приложение, которое позволяет пользователям открывать или сохранять файлы. Когда пользователь инициирует это действие, приложение вызывает средство выбора файлов, которое отображает пользовательский интерфейс средства выбора файлов:
Как элементы для выбора работают с вашим приложением
С помощью средства выбора приложение может получать доступ, просматривать и сохранять файлы и папки в системе пользователя. Приложение получает эти выборы как упрощенные объекты PickFileResult и PickFolderResult , которые предоставляют путь к выбранному файлу или папке.
Средство выбора использует единый унифицированный интерфейс, чтобы разрешить пользователю выбирать файлы и папки из файловой системы или из других приложений. Файлы, выбранные из других приложений, похожи на файлы из файловой системы. Как правило, приложение может работать с ними так же, как и другие объекты. Другие приложения предоставляют файлы с помощью участия в контрактах средства выбора файлов.
Например, можно вызвать средство выбора файлов в приложении, чтобы пользователь мог открыть файл. Это действие делает приложение вызывающим приложением. Средство выбора файлов взаимодействует с системой и другими приложениями, чтобы разрешить пользователю перемещаться и выбирать файл. Когда пользователь выбирает файл, файловый менеджер возвращает путь к этому файлу в ваше приложение.
Выбор файла для открытия примера
В следующем коде показано, как использовать класс FileOpenPicker , чтобы пользователь выбрал один файл, например фотографию. Код задает свойства средства выбора для настройки внешнего вида и поведения, а затем показывает средство выбора пользователю с помощью метода PickSingleFileAsync . Если пользователь выбирает файл, приложение считывает содержимое файла и сохраняет его в переменной.
using Microsoft.Windows.Storage.Pickers;
var openPicker = new FileOpenPicker(this.AppWindow.Id)
{
// (Optional) Specify the initial location for the picker.
// If the specified location doesn't exist on the user's machine, it falls back to the DocumentsLibrary.
// If not set, it defaults to PickerLocationId.Unspecified, and the system will use its default location.
SuggestedStartLocation = PickerLocationId.DocumentsLibrary,
// (Optional) specify the text displayed on the commit button.
// If not specified, the system uses a default label of "Open" (suitably translated).
CommitButtonText = "Choose selected files",
// (Optional) specify file extension filters. If not specified, defaults to all files (*.*).
FileTypeFilter = { ".txt", ".pdf", ".doc", ".docx" },
// (Optional) specify the view mode of the picker dialog. If not specified, defaults to List.
ViewMode = PickerViewMode.List,
};
var result = await openPicker.PickSingleFileAsync();
if (result is not null)
{
var content = System.IO.File.ReadAllText(result.Path);
}
else
{
// Add your error handling here.
}
Это тот же пример в C++:
#include <winrt/Microsoft.Windows.Storage.Pickers.h>
#include <fstream>
#include <string>
using namespace winrt::Microsoft::Windows::Storage::Pickers;
FileOpenPicker openPicker(this->AppWindow().Id());
// (Optional) Specify the initial location for the picker.
// If the specified location doesn't exist on the user's machine, it falls back to the DocumentsLibrary.
// If not set, it defaults to PickerLocationId.Unspecified, and the system will use its default location.
openPicker.SuggestedStartLocation(PickerLocationId::DocumentsLibrary);
// (Optional) specify the text displayed on the commit button.
// If not specified, the system uses a default label of "Open" (suitably translated).
openPicker.CommitButtonText(L"Choose selected files");
// (Optional) specify file extension filters. If not specified, defaults to all files (*.*).
openPicker.FileTypeFilter().ReplaceAll({ L".txt", L".pdf", L".doc", L".docx" });
// (Optional) specify the view mode of the picker dialog. If not specified, defaults to List.
openPicker.ViewMode(PickerViewMode::List);
auto result{ co_await openPicker.PickSingleFileAsync() };
if (result)
{
std::ifstream fileReader(result.Path().c_str());
std::string text((std::istreambuf_iterator<char>(fileReader)), std::istreambuf_iterator<char>());
winrt::hstring hText = winrt::to_hstring(text);
}
else
{
// Add your error handling here.
}
Выбор нескольких файлов для открытия примера
Вы также можете разрешить пользователю выбирать несколько файлов. В следующем коде показано, как использовать класс FileOpenPicker , чтобы пользователь выбрал несколько файлов, таких как фотографии. Процесс такой же, но метод PickMultipleFilesAsync возвращает коллекцию путей к файлам вместо одного пути.
using Microsoft.Windows.Storage.Pickers;
var openPicker = new FileOpenPicker(this.AppWindow.Id);
var results = await openPicker.PickMultipleFilesAsync();
if (results.Count > 0)
{
var pickedFilePaths = results.Select(f => f.Path);
foreach (var path in pickedFilePaths)
{
var content = System.IO.File.ReadAllText(path);
}
}
else
{
// Add your error handling here.
}
Чтобы выполнить ту же операцию в C++, используйте следующий код:
#include <winrt/Microsoft.Windows.Storage.Pickers.h>
#include <fstream>
#include <string>
using namespace winrt::Microsoft::Windows::Storage::Pickers;
FileOpenPicker openPicker(this->AppWindow().Id());
auto results{ co_await openPicker.PickMultipleFilesAsync() };
if (results.Size() > 0)
{
for (auto const& result : results)
{
std::ifstream fileReader(result.Path().c_str());
std::string text((std::istreambuf_iterator<char>(fileReader)), std::istreambuf_iterator<char>());
winrt::hstring hText = winrt::to_hstring(text);
}
}
else
{
// Add your error handling here.
}
Выбор примера папки
Чтобы выбрать папку с помощью класса FolderPicker , используйте следующий код. Этот код создает средство выбора папок, отображает его пользователю с помощью метода PickSingleFolderAsync и извлекает путь выбранной папки в объекте PickFolderResult . Если пользователь выбирает папку, приложение извлекает путь к папке и сохраняет его в переменной для последующего использования.
using Microsoft.Windows.Storage.Pickers;
var folderPicker = new FolderPicker(this.AppWindow.Id)
{
// (Optional) Specify the initial location for the picker.
// If the specified location doesn't exist on the user's machine, it falls back to the DocumentsLibrary.
// If not set, it defaults to PickerLocationId.Unspecified, and the system will use its default location.
SuggestedStartLocation = PickerLocationId.DocumentsLibrary,
// (Optional) specify the text displayed on the commit button.
// If not specified, the system uses a default label of "Open" (suitably translated).
CommitButtonText = "Select Folder",
// (Optional) specify the view mode of the picker dialog. If not specified, default to List.
ViewMode = PickerViewMode.List,
};
var result = await folderPicker.PickSingleFolderAsync();
if (result is not null)
{
var path = result.Path;
}
else
{
// Add your error handling here.
}
Чтобы выполнить ту же операцию в C++, используйте следующий код:
#include <winrt/Microsoft.Windows.Storage.Pickers.h>
using namespace winrt::Microsoft::Windows::Storage::Pickers;
FolderPicker folderPicker(this->AppWindow().Id());
// (Optional) Specify the initial location for the picker.
// If the specified location doesn't exist on the user's machine, it falls back to the DocumentsLibrary.
// If not set, it defaults to PickerLocationId.Unspecified, and the system will use its default location.
folderPicker.SuggestedStartLocation(PickerLocationId::DocumentsLibrary);
// (Optional) specify the text displayed on the commit button.
// If not specified, the system uses a default label of "Open" (suitably translated).
folderPicker.CommitButtonText(L"Select Folder");
// (Optional) specify the view mode of the picker dialog. If not specified, default to List.
folderPicker.ViewMode(PickerViewMode::List);
auto result{ co_await folderPicker.PickSingleFolderAsync() };
if (result)
{
auto path{ result.Path() };
}
else
{
// Add your error handling here.
}
Подсказка
Когда ваше приложение обращается к файлу или папке с помощью средства выбора, добавьте его в FutureAccessList или MostRecentlyUsedList, чтобы отслеживать его с помощью API среды выполнения Windows (WinRT). Дополнительные сведения см. в разделе "Отслеживание недавно используемых файлов и папок".
Пользовательский интерфейс средства выбора папок выглядит следующим образом:
Связанный контент
Файлы, папки и библиотеки с помощью пакета SDK для приложений Windows
Windows developer