c# - 应用第二次运行时拒绝访问文件

标签 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。我可以在第一次调试应用程序时获取该文件,但在第二次运行时,我得到了第一个 StorageFileUnauthorizedException。令人惊讶的是,第二次通过 RemovableStorage 获取文件的尝试每次都有效。 如果我只重新启动手机并再次调试应用程序 - 它会再次工作,但仍然只是第一次。

StorageFile.GetFileFromPathAsync() 访问文件是否受到某种限制? 我错过了什么吗?


更新:

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

最佳答案

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

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

关于c# - 应用第二次运行时拒绝访问文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33846675/

相关文章:

c# - MethodImpl(No Optimization) 在这个方法上,它做了什么?而且真的有必要吗?

c# - 具有私有(private) setter 的 UWP DependencyProperty

UWP/WinUI 桌面应用访问 Azure Key Vault secret

c# - 清除返回堆栈导航 Windows 10

c# - Windows 10 移动应用程序扩展执行不断被拒绝

c# - 在单独的线程上将数据绑定(bind)到网格控件

c# - Json字符串转C#对象

c# - css 将两个输入置于一个 div 中

c# - 如何全局声明样式并在 uwp 中的应用程序中使用该样式

c# - 在 ScrollViewer (UWP) 中移动图像