UWP StorageFile.OpenAsync访问被拒绝问题

时间:2018-09-21 22:56:10

标签: c# uwp

我遇到了一个问题,我可以从应用程序安装目录中的文件中读取文件,但是无法写入文件。

在下面的代码中,我打开一个文件进行读取,处理,处置流指针,然后尝试打开该文件进行写入。

//Open file for reading
var SocStorageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///LastSoc.txt"));
var SocInputStream = await SocStorageFile.OpenReadAsync();
var SocClassicStream = SocInputStream.AsStreamForRead();
var SocStream = new StreamReader(SocClassicStream);

<do stuff with file read>
.....

SocInputStream.Dispose();
SocClassicStream.Dispose();
SocStream.Dispose();

//Open record file for writing
var RandomAccessStream = await 
SocStorageFile.OpenAsync(FileAccessMode.ReadWrite);

当我尝试最后一行以启用写访问权限时,我得到:

  

System.UnauthorizedAccessException:'访问被拒绝。 (来自的例外   HRESULT:0x80070005(E_ACCESSDENIED))'

担心我的Dispose()方法没有完全清除它,我尝试注释掉所有读取访问权限。同样的错误。 (是的,我知道,我应该使用“使用”,但我认为这不是问题所在)

我不确定为什么无法获得写访问权限。忠告表示感谢!

1 个答案:

答案 0 :(得分:1)

从代码中指定的路径看来,您似乎正在尝试写入应用程序包中的文件。此文件位于您的应用的安装文件夹中,您只能对其进行只读访问。

简而言之,您可以读取安装目录中的应用程序文件,但不能写入该目录中的文件。在应用程序安装目录中创建新文件时也是如此。

看看Microsoft的这份文档,它说明了UWP中的文件访问:window.open()

从上面链接的文档中,重要的部分是:

  

该应用程序的安装目录是只读位置。您无法通过文件选择器访问安装目录。

现在,如果您打算更新此文件的内容,则应将其移至“应用程序数据”文件夹(https://www.mywebsite.ext/earth?year=&foo=1&bar=0 )。允许UWP应用在该目录中读写(和创建新文件)。