Сбой чтения файлов из KnownFolders.DocumentsLibrary (E_ACCESSDENIED), когда папка «Документы» находится в разделе «Перемещение известных папок (KFM)» в OneDrive - PullRequest
0 голосов
/ 28 марта 2019

У меня есть приложение, которое читает файлы из KnownFolders.DocumentsLibrary, используя StorageFolder/StorageFile. До того, как Onedrive захватил папку «Документы», мое приложение работало нормально. Таким образом, все возможности / ассоциации типов файлов в манифесте приложения объявлены.

Я пытался объявить возможность broadFileSystemAccess, но получил тот же результат.

StorageFolder folder = Windows.Storage.KnownFolders.DocumentsLibrary;
string content = await FileIO.ReadTextAsync("file.txt", 
Windows.Storage.Streams.UnicodeEncoding.Utf8);

Я ожидаю прочитать файл, как и раньше, но теперь я получаю

{System.UnauthorizedAccessException: (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) }

1 Ответ

0 голосов
/ 29 марта 2019

KnownFolders.DocumentsLibrary объяснил это ясно.

Библиотека документов не предназначена для общего пользования. Для получения дополнительной информации см. Объявления о возможностях приложения .

Если ваше приложение должно создавать и обновлять файлы, которые используются только вашим приложением, рассмотрите возможность использования папки LocalCache приложения.

В качестве альтернативы, пользователь может выбрать местоположение файла с помощью средства выбора файлов. Для получения дополнительной информации см. Открытие файлов и папок с помощью средства выбора .

Итак, если у вас нет особых требований, я предложил вам использовать Папка ApplicationData или использовать средство выбора папок и файлов.

Документы используются совместно с другими приложениями, поэтому единственным распространенным местоположением является Документы. Выбор файла не вариант. Основная проблема связана с тем, что One Drive захватывает папку, так как приложение работает нормально в течение нескольких лет.

Если вам нужно использовать DocumentsLibrary, вы можете использовать документ KnownFolders.DocumentsLibrary , чтобы добавить возможность Библиотека документов в файл манифеста и зарегистрировать хотя бы одно объявление ассоциации типов файлов. Тогда вы можете прочитать файл оттуда.

StorageFolder folder = Windows.Storage.KnownFolders.DocumentsLibrary;
var files = await folder.GetFilesAsync();
foreach (var f in files)
{
     string text = await Windows.Storage.FileIO.ReadTextAsync(f);
     Debug.WriteLine(f.DisplayName + ": " + text);
}
<Extensions>
    <uap:Extension Category="windows.fileTypeAssociation">
      <uap:FileTypeAssociation Name="appdoc">
        <uap:SupportedFileTypes>
          <uap:FileType>.txt</uap:FileType>
        </uap:SupportedFileTypes>
      </uap:FileTypeAssociation>
    </uap:Extension>
  </Extensions>
 ....
 <Capabilities>
    <Capability Name="internetClient" />
    <uap:Capability Name="documentsLibrary" />
 </Capabilities>
...