Я провел массу исследований по MSDN и SO, но, похоже, на эту тему было много смешанных отзывов, и нет однозначного ответа.Мое приложение UWP должно загрузить некоторые элементы для пользователя.Кажется логичным, что это идет в папку «загрузки» вместо документов или изображений.
Что я понял из своего чтения, так это то, что приложению разрешен доступ к папке загрузок и созданию файлов и подпапок в папке загрузок.Однако он не может получить доступ к другим файлам и папкам (не созданным из вашего приложения) без использования средства выбора.В этом случае мне не нужно использовать средство выбора, потому что мое приложение использует и создает папку для себя.Я также читал, что в Манифесте не нужно специальных возможностей, чтобы это работало.
Я могу подтвердить, что на самом деле это работает, создав папку и файл в папке загрузок
StorageFile destinationFile;
StorageFolder downloadsFolder;
try
{
//Create a sub folder in downloads
try
{
downloadsFolder = await DownloadsFolder.CreateFolderAsync("AppFiles");
}
catch (Exception ex)
{
//HERE IS THE ISSUE. I get in here if the folder exists but how do i get it?
}
destinationFile = await downloadsFolder.CreateFileAsync(destination,CreationCollisionOption.GenerateUniqueName);
}
catch (FileNotFoundException ex)
{
rootPage.NotifyUser("Error while creating file: " + ex.Message, NotifyType.ErrorMessage);
return;
}
Однако здесь возникает основная проблема.Этот код отлично работает с первого раза, потому что папка еще не существует и создает ее вместе с файлом.В последующие периоды происходит сбой и возникает исключение:
Невозможно создать файл, если этот файл уже существует.(Исключение из HRESULT: 0x800700B7)
Он делает это на линии, чтобы создать папку в папке загрузок:
downloadsFolder = await DownloadsFolder.CreateFolderAsync("AppFiles");
Проблема заключается в том, что MSDN заявляет, что я не могу использоватьВарианты коллизий «OpenIfExists» или «ReplaceExisting», которые являются двумя вариантами коллизий, которые мне понадобятся для решения этой проблемы.Два оставшихся варианта меня не устраивают.Так что, несмотря ни на что, будет выброшено исключение, если папка существует.
Затем возникает мысль, что я могу просто перехватить исключение, как я уже делал в моем фрагменте выше, и открыть папку.если это существует.Проблема заключается в том, что класс «DownloadsFolder» не предоставляет никаких параметров для получения или открытия папки, а только для ее создания.
Итак, кажется, я могу создать папку из своего приложения, но не могу открыть или получить папку, созданную моим приложением?
Спасибо!