我有一个应用使用KnownFolders.DocumentsLibrary
从StorageFolder/StorageFile
读取文件。
在Onedrive接管Documents文件夹之前,我的应用正常运行。
因此,声明了应用清单中的所有功能/文件类型关联。
我尝试声明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)) }
答案 0 :(得分:0)
KnownFolders.DocumentsLibrary进行了清楚的解释。
文档库不适用于一般用途。有关更多信息,请参见App capability declarations。
如果您的应用程序必须创建和更新仅由您的应用程序使用的文件,请考虑使用该应用程序的LocalCache文件夹。
或者,让用户使用文件选择器选择文件位置。有关更多信息,请参见Open files and folders with a picker。
因此,如果您没有特定要求,建议您使用ApplicationData Folder或文件夹和文件选择器。
文档与其他应用共享,因此唯一的公共位置是文档。文件选择器不是一个选项。主要问题是One Drive接管了该文件夹,因为该应用程序已经运行了好几年。
如果必须使用DocumentsLibrary,则可以遵循KnownFolders.DocumentsLibrary文档在清单文件中添加 Documents Library 功能,并至少注册一个File Type Association声明。然后您可以从那里读取文件。
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>