Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Приложения WinUI могут получить доступ к определенным расположениям файловой системы по умолчанию. Приложения могут также получить доступ к дополнительным местоположениям через средство выбора файлов или же посредством объявления возможностей.
Расположения, к которым могут получить доступ приложения WinUI
При создании приложения вы можете получить доступ к следующим расположениям файловой системы по умолчанию:
Каталог установки приложения
Папка, в которой приложение установлено в системе пользователя.
В каталоге установки приложения есть два основных способа доступа к файлам и папкам:
Вы можете получить StorageFolder, представляющий директорию установки вашего приложения, следующим образом.
Windows.Storage.StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;#include <winrt/Windows.Storage.h> ... Windows::Storage::StorageFolder installedLocation{ Windows::ApplicationModel::Package::Current().InstalledLocation() };Затем вы можете получить доступ к файлам и папкам в каталоге с помощью методов StorageFolder . В этом примере хранилищеFolder хранится в переменной
installDirectory. Дополнительные сведения о работе с пакетом приложения и каталогом установки см. в примере сведений о пакете приложения на сайте GitHub.Файл можно получить непосредственно из каталога установки приложения с помощью URI приложения, как показано ниже.
using Windows.Storage; StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///file.txt"));Windows::Foundation::IAsyncAction ExampleCoroutineAsync() { Windows::Storage::StorageFile file{ co_await Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(Windows::Foundation::Uri{L"ms-appx:///file.txt"}) }; // Process file }После завершения GetFileFromApplicationUriAsync возвращает файл StorageFile , представляющий
file.txtфайл в каталоге установки приложения (fileв примере).Префикс ms-appx:///в URI ссылается на каталог установки приложения. Дополнительные сведения об использовании URI приложений см. в руководстве по использованию URI для ссылки на содержимое.
Кроме того, в отличие от других расположений, вы также можете получить доступ к файлам в каталоге установки приложения с помощью некоторых Win32 и COM для приложений WinUI и некоторых функций стандартной библиотеки C/C++ из Microsoft Visual Studio.
Каталог установки для приложения является только для чтения. Невозможно получить доступ к каталогу установки с помощью средства выбора файлов.
Доступ к расположениям данных приложения
Папки, в которых ваше приложение может хранить данные. Эти папки (локальные, перемещаемые и временные) создаются при установке приложения.
Существует два основных способа доступа к файлам и папкам из расположений данных приложения:
Используйте свойства ApplicationData для получения папки данных приложения.
Например, можно использовать ApplicationData. LocalFolder для получения папки StorageFolder , представляющей локальную папку приложения следующим образом:
using Windows.Storage; StorageFolder localFolder = ApplicationData.Current.LocalFolder;Windows::Storage::StorageFolder storageFolder{ Windows::Storage::ApplicationData::Current().LocalFolder() };Если вы хотите получить доступ к перемещаемой или временной папке приложения, используйте вместо этого свойство RoamingFolder или TemporaryFolder .
После получения объекта StorageFolder, представляющего расположение данных приложения, вы можете получить доступ к файлам и папкам в этом расположении с помощью методов StorageFolder. В этом примере эти объекты StorageFolder хранятся в переменной
localFolder. Дополнительные сведения об использовании расположений данных приложения см. на странице класса ApplicationData и скачив пример данных приложения из GitHub.Файл можно получить непосредственно из локальной папки приложения с помощью URI приложения, как показано ниже.
using Windows.Storage; StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/file.txt"));Windows::Storage::StorageFile file{ co_await Windows::Storage::StorageFile::GetFileFromApplicationUriAsync(Windows::Foundation::Uri{ L"ms-appdata:///local/file.txt" }) }; // Process fileПосле завершения GetFileFromApplicationUriAsync возвращает файл StorageFile , представляющий
file.txtфайл в локальной папке приложения (fileв примере).Префикс ms-appdata:///local/" в URI ссылается на локальную папку приложения. Для доступа к файлам в перемещаемых или временных папках приложения вместо этого используйте ms-appdata:///roaming/или ms-appdata:///temporary/. Дополнительные сведения об использовании URI приложений см. в разделе "Загрузка ресурсов файлов".
Кроме того, в отличие от других расположений, вы также можете получить доступ к файлам в расположениях данных вашего приложения, используя некоторые библиотеки Win32 и COM для приложений WinUI и некоторые функции стандартной библиотеки C/C++ в Visual Studio.
Вы не можете получить доступ к локальным, перемещаемым или временным папкам через средство выбора файлов.
Доступ к съемным устройствам
Кроме того, приложение может получить доступ к некоторым файлам на подключенных устройствах по умолчанию. Это вариант, если приложение использует расширение Автозапуска для автоматического запуска при подключении устройства, например камеры или USB-накопителя, к системе. Доступ к файлам приложения ограничен определенными типами файлов, указанными в объявлениях сопоставления типов файлов в манифесте приложения.
Конечно, вы также можете получить доступ к файлам и папкам на съемных устройствах, вызвав средство выбора файлов (с помощью FileOpenPicker и FolderPicker) и позволяя пользователю выбирать файлы и папки для доступа к приложению. Узнайте, как использовать средство выбора файлов в открытых файлах и папках с помощью средства выбора.
Замечание
Дополнительные сведения о доступе к SD-карте или другим съемным устройствам см. в статье "Доступ к SD-карте".
Папка загрузки пользователя
Папка, в которой скачанные файлы сохраняются по умолчанию.
По умолчанию приложение может получать доступ только к файлам и папкам в папке загрузки пользователя, созданной приложением. Однако вы можете получить доступ к файлам и папкам в папке загрузки пользователя, вызвав средство выбора файлов (FileOpenPicker или FolderPicker), чтобы пользователи могли перемещаться и выбирать файлы или папки для доступа к приложению.
Вы можете создать файл в папке загрузки пользователя, как показано ниже.
using Windows.Storage; StorageFile newFile = await DownloadsFolder.CreateFileAsync("file.txt");Windows::Storage::StorageFile newFile{ co_await Windows::Storage::DownloadsFolder::CreateFileAsync(L"file.txt") }; // Process fileDownloadsFolder. CreateFileAsync перегружен таким образом, чтобы можно было указать, что должна сделать система, если в папке downloads уже есть существующий файл с тем же именем. После завершения этих методов они возвращают файл StorageFile , представляющий созданный файл. Этот файл называется
newFileв примере.Вы можете создать вложенную папку в папке загрузки пользователя, как показано ниже.
using Windows.Storage; StorageFolder newFolder = await DownloadsFolder.CreateFolderAsync("New Folder");Windows::Storage::StorageFolder newFolder{ co_await Windows::Storage::DownloadsFolder::CreateFolderAsync(L"New Folder") }; // Process folderDownloadsFolder. CreateFolderAsync перегружен, чтобы указать, что должна сделать система, если в папке Downloads уже есть вложенная папка, которая имеет то же имя. После завершения этих методов они возвращают папку StorageFolder , представляющую созданную вложенную папку. Этот файл называется
newFolderв примере.
Доступ к дополнительным локациям
Помимо расположений по умолчанию приложение может получить доступ к дополнительным файлам и папкам, объявив возможности в манифесте приложения или вызвав средство выбора файлов , чтобы разрешить пользователю выбирать файлы и папки для доступа к приложению.
Приложения, объявляющие расширение AppExecutionAlias , имеют разрешения файловой системы из каталога, который они запускаются в окне консоли и вниз.
Сохранение доступа к файлам и папкам
Когда приложение получает файл или папку с помощью средства выбора, активации файла, операции перетаскивания и т. д. он имеет доступ только к файлу или папке, пока приложение не завершится. Если вы хотите автоматически получить доступ к файлу или папке в будущем, вы можете добавить его в FutureAccessList , чтобы ваше приложение могли легко получить доступ к этому элементу в будущем. Кроме того, с помощью MostRecentlyUsedList можно легко управлять списком недавно используемых файлов.
Возможности доступа к другим расположениям
В следующей таблице перечислены дополнительные расположения, к которым можно получить доступ, объявляя одну или несколько возможностей и используя связанный API Windows.Storage .
| Местоположение | Функциональность | Windows.Storage API |
|---|---|---|
| Все файлы, к которым у пользователя есть доступ. Например, документы, рисунки, фотографии, загрузки, настольные компьютеры, OneDrive и т. д. | broadFileSystemAccess Это ограниченная возможность. Доступ можно настроить в Параметры > Конфиденциальность >Файловая система. Так как пользователи могут предоставить или отменить разрешение в любой момент в разделе "Параметры", следует убедиться, что приложение устойчиво к этим изменениям. Если у приложения нет доступа, вы можете предложить пользователю изменить этот параметр, предоставив ссылку на доступ к файловой системе Windows и статью о конфиденциальности. Обратите внимание, что пользователь должен закрыть приложение, переключить параметр и перезапустить приложение. Если они переключают параметр во время работы приложения, платформа приостанавливает приложение, чтобы сохранить состояние, а затем принудительно завершить работу приложения, чтобы применить новый параметр. В обновлении за апрель 2018 года по умолчанию это разрешение включено. В обновлении октябрь 2018 по умолчанию оно отключено. Если вы отправляете приложение в Магазин, которое объявляет эту возможность, вам потребуется предоставить дополнительные описания того, почему ваше приложение нуждается в этой возможности и как оно намерено его использовать. Эта возможность работает для API в пространстве имен Windows.Storage . В разделе "Пример" в конце этой статьи приведен пример включения этой возможности в приложении. Примечание. Эта возможность не поддерживается в Xbox. |
n/a |
| Documents | библиотека документов Примечание. Необходимо добавить сопоставления типов файлов в манифест приложения, объявляющий определенные типы файлов, к которым приложение может получить доступ в этом расположении. Используйте эту возможность, если ваше приложение: — упрощает кроссплатформенный автономный доступ к определенному содержимому OneDrive с помощью допустимых URL-адресов OneDrive или идентификаторов ресурсов. — автоматически сохраняет открытые файлы в OneDrive пользователя в автономном режиме. |
KnownFolders.DocumentsLibrary |
| Music | Музыкальная библиотека Также см. файлы и папки в библиотеках "Музыка", "Рисунки" и "Видео". |
KnownFolders.MusicLibrary |
| Pictures | библиотека изображений Также см. файлы и папки в библиотеках "Музыка", "Рисунки" и "Видео". |
KnownFolders.PicturesLibrary |
| Видеоролики | библиотека видео Также см. файлы и папки в библиотеках "Музыка", "Рисунки" и "Видео". |
KnownFolders.VideosLibrary |
| Съемные устройства | съемное хранилище Примечание. Необходимо добавить сопоставления типов файлов в манифест приложения, которые объявляют определенные типы файлов, к которым приложение может получить доступ в этом расположении. Также см. раздел "Доступ к SD-карте". |
KnownFolders.RemovableDevices |
| Библиотеки домашней группы | Требуется по крайней мере одна из следующих возможностей. - musicLibrary - библиотека изображений - видеобиблиотека |
KnownFolders.HomeGroup |
| Устройства сервера мультимедиа (DLNA) | Требуется по крайней мере одна из следующих возможностей. - musicLibrary - библиотека изображений - видеотека |
KnownFolders.MediaServerDevices |
| Папки универсальной системы имен (UNC) | Требуется сочетание следующих возможностей. Возможности домашних и рабочих сетей: — privateNetworkClientServer И по крайней мере одна возможность интернета и общедоступных сетей: — internetClient — internetClientServer И, если применимо, возможность учетных данных домена: — аутентификация предприятия Примечание: Необходимо добавить сопоставления типов файлов в манифест приложения, объявляющий определенные типы файлов, к которым приложение может получить доступ в этом расположении. |
Получение папки с помощью: StorageFolder.GetFolderFromPathAsync Получение файла с помощью: StorageFile.GetFileFromPathAsync |
Пример
В этом примере добавляется ограниченная функция broadFileSystemAccess. Помимо указания возможности, необходимо добавить пространство имен rescap, а также в IgnorableNamespaces.
<Package
...
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
...
<Capabilities>
<rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>
Замечание
Полный список возможностей приложений см. в объявлениях возможностей приложений.
Windows developer