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

时间:2019-05-29 18:29:12

标签: c# uwp openxml windows-10-universal openxml-sdk

我正在尝试使用UWP应用(通用Windows)编辑现有的Word文档。但是由于某种原因,我收到“文件不存在”错误。

我尝试使用以下代码访问word文档:

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

}

System.IO.FileNotFoundException:“找不到文档”

2 个答案:

答案 0 :(得分:0)

默认情况下,UWP不允许访问应用容器外部的文件。但是从Windows 10内部版本17134开始,引入了新功能broadFileSystemAccess。它允许应用程序与当前运行该应用程序的用户获得对文件系统的相同访问权限,而在运行时不会出现任何其他文件选择器样式的提示。

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

有关更多信息,请参见File access permissions中的App capability declarations和broadFileSystemAccess条目。

如果在添加broadFileSystemAccess功能时仍然遇到此问题,则该问题应该在“ WordprocessingDocument.Open” API中。您需要注意,“文件访问权限”文档已提及:

  

broadFileSystemAccess功能适用于Windows.Storage名称空间中的API。

这意味着'WordprocessingDocument.Open'可能无法使用Windows.Storage API来访问文件。如果是这样,您需要将此问题报告给Open-XML-SDK

答案 1 :(得分:0)

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

  1. 将.DOCX文件添加到项目内的Assets文件夹中,并将生成操作设置为“内容”。

    Set Build action to 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一次,等等,但是您已经掌握了基本思想。