无法使用 UWP 应用程序访问我系统上的 Word 文档

Not able to access the Word Document on my system using the UWP application

我正在尝试使用 UWP 应用程序(通用 Windows)编辑现有的 Word 文档。但由于某种原因,我收到 "File does not exist" 错误。

我试过使用下面的代码访问word文档:

using(WordprocessingDocument wordDoc = WordprocessingDocument.Open("C:\Users\Public\Desktop\Doc1.docx", true))
{

}

System.IO.FileNotFoundException: 'Could not find document'

默认情况下,UWP 不允许访问应用容器外的文件。但是从 windows 10 build 17134 开始,引入了一项新功能 broadFileSystemAccess。它允许应用程序获得与当前 运行 应用程序用户相同的文件系统访问权限,而无需在运行时使用任何额外的 file-picker 样式提示。

因此,请检查您是否在 'Package.appxmanifest' 文件中声明了此功能。

请参阅File access permissions and broadFileSystemAccess entry in App capability declarations了解更多信息。

如果添加broadFileSystemAccess能力后仍然遇到这个问题,那么,问题应该在'WordprocessingDocument.Open'API。您需要注意 'File access permissions' 文件提到:

This broadFileSystemAccess capability works for APIs in the Windows.Storage namespace.

这意味着 'WordprocessingDocument.Open' 不能使用 Windows.Storage APIs to access the files. If so, you need to report this issue to Open-XML-SDK

根据评论部分的进一步说明,请参阅以下说明。

  1. 将您的 .DOCX 文件添加到项目中的 Assets 文件夹,并将构建操作设置为 "Content"。

  2. 为了将任何更改写入文件,我们需要将其复制到包 LocalFolder,然后从那里访问它。

    var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/doc1.docx"));
    if (file != null)
    {
        //Copy .docx file to LocalFolder so we can write to it
        await file.CopyAsync(ApplicationData.Current.LocalFolder);
        String newFile = ApplicationData.Current.LocalFolder.Path + "/doc1.docx";
    
        using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(newFile, true))
        {
                //Your code here
        }
    }
    

您需要对此进行一些扩展,以确保文件仅复制到 LocalFolder 一次等,但您已经了解了基本概念。