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

当我尝试使用代码访问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卡上,我已经声明了RemovableStoragefunction,并添加了FileTypeAssociation 。 我可以在第一次调试应用程序时获取该文件,但在第二次运行时,我获得了第一个StorageFile的 UnauthorizedException 。 令人惊讶的是第二次尝试通过RemovableStorage获取文件每次都有效。 如果我只重新启动手机并再次调试应用程序 – 它将再次工作,但仍然只是第一次。

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


更新:

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

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

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