在应用程序第二次运行时访问文件被拒绝

时间:2015-11-21 17:54:37

标签: c# uwp windows-10-mobile

当我尝试使用代码访问SD卡上的文件时,我遇到了一个奇怪的问题:

var path = @"D:\Test\test.txt";
try
{
    StorageFile file = await StorageFile.GetFileFromPathAsync(path);
}
catch (Exception ex) { Debug.WriteLine($"File access failed due to {ex.Message}"); }

path = @"Test\test.txt";
StorageFile file2 = await (await KnownFolders.RemovableDevices.GetFoldersAsync()).FirstOrDefault().GetFileAsync(path);

该文件在SD卡上,我已声明 RemovableStorage 功能,并添加了 FileTypeAssociation 。我可以在第一次调试应用程序时获取该文件,但在第二次运行时,我使用第一个 StorageFile 获得 UnauthorizedException 。令人惊讶的是第二次尝试通过 RemovableStorage 获取文件每次都有效。 如果我只重新启动手机并再次调试应用程序 - 它将再次起作用,但仍然只是第一次。

通过 StorageFile.GetFileFromPathAsync()以某种方式限制访问文件? 我错过了什么吗?

更新

似乎最新版本的模拟器10856我在每次运行时都会遇到异常,这可能意味着无法通过完整路径访问文件。

1 个答案:

答案 0 :(得分:1)

选择器允许访问,因为用户向您提供了文件,而不是路径。 winstore应用程序不应该依赖于用户驱动器/文件夹布局,这就是您无权通过绝对路径访问文件的原因。在这种情况下,我们首先应该允许访问清单文件中的可移动设备,然后我们应该使用系统的RemovebleDevices文件夹来访问允许类型的文件。

同样奇怪的是,你可以第一次使用绝对路径。在我的测试设备中,如果使用绝对路径,我总是会收到UnauthorizedAccessException和“Access is denied”错误。我的设备是build 10586.11。