第二次访问文件被拒绝 运行
Access to file denied on app's second run
我在尝试使用代码访问 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。当我第一次调试应用程序时,我可以获得该文件,但在第二个 运行 我得到 UnauthorizedException 和第一个 StorageFile。令人惊讶的是,第二次尝试通过 RemovableStorage 获取文件每次都有效。
如果我只重新启动 phone 并再次调试应用程序 - 它会再次工作,但仍然只是第一次。
通过 StorageFile.GetFileFromPathAsync() 访问文件是否受到某种限制?
我错过了什么吗?
更新:
似乎在最新版本的模拟器 10856 上,我在每个 运行 上都遇到异常,这可能意味着无法通过完整路径访问文件。
选择器允许访问,因为用户向您提供的是文件,而不是路径。 winstore 应用程序不应依赖于用户的驱动器/文件夹布局,这就是为什么您无权通过绝对路径访问文件的原因。在这种情况下,我们应该首先在清单文件中允许访问可移动设备,然后我们应该使用系统的 RemovebleDevices 文件夹来访问允许类型的文件。
而且你第一次可以使用绝对路径也很奇怪。在我的测试设备中,如果使用绝对路径,我总是会收到 UnauthorizedAccessException 和 "Access is denied" 错误。我的设备是 build 10586.11。
我在尝试使用代码访问 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。当我第一次调试应用程序时,我可以获得该文件,但在第二个 运行 我得到 UnauthorizedException 和第一个 StorageFile。令人惊讶的是,第二次尝试通过 RemovableStorage 获取文件每次都有效。 如果我只重新启动 phone 并再次调试应用程序 - 它会再次工作,但仍然只是第一次。
通过 StorageFile.GetFileFromPathAsync() 访问文件是否受到某种限制? 我错过了什么吗?
更新:
似乎在最新版本的模拟器 10856 上,我在每个 运行 上都遇到异常,这可能意味着无法通过完整路径访问文件。
选择器允许访问,因为用户向您提供的是文件,而不是路径。 winstore 应用程序不应依赖于用户的驱动器/文件夹布局,这就是为什么您无权通过绝对路径访问文件的原因。在这种情况下,我们应该首先在清单文件中允许访问可移动设备,然后我们应该使用系统的 RemovebleDevices 文件夹来访问允许类型的文件。
而且你第一次可以使用绝对路径也很奇怪。在我的测试设备中,如果使用绝对路径,我总是会收到 UnauthorizedAccessException 和 "Access is denied" 错误。我的设备是 build 10586.11。