你可以从它的路径访问一个选择的 StorageFile 吗? - UWP

Posted

技术标签:

【中文标题】你可以从它的路径访问一个选择的 StorageFile 吗? - UWP【英文标题】:Can you access a picked StorageFile from its Path? - UWP 【发布时间】:2020-12-05 13:56:19 【问题描述】:

我需要能够从 UWP 应用程序中的路径访问文件。

文件首先由用户使用 OpenFilePicker 选择。然后我需要将此文件传递给 FFmpeg 包装器,该包装器从文件路径设置其输入。目前,对于应用程序本地存储之外的任何文件(如预期的那样),我都会收到拒绝访问错误。

FileOpenPicker filePicker = new FileOpenPicker();
filePicker.ViewMode = PickerViewMode.Thumbnail;
filePicker.FileTypeFilter.Add("*");


var file = await filePicker.PickSingleFileAsync();


FFMpegArguments
   .FromInputFiles(file.Path.ToString())

当通过路径字符串 (file.Path.ToString()) 而不是存储文件实例访问该文件时,有没有办法保留应用程序对该文件的权限?一直在研究 FutureAccessList ,但这似乎只是稍后提供另一个存储文件实例,而不是允许路径访问同一文件。我不想启用广泛的文件系统访问,因为我只需要访问用户已经选择的单个文件。

谢谢!

【问题讨论】:

FFMpegArguments.FromInputFiles 是否收到StorageFile 不幸的是它没有。这是一个 .net 包装器,我将它硬塞到 UWP 应用程序中。有一个选项可以接收流,但无法使其正常工作。包装器是 github.com/rosenbjerg/FFMpegCore 如果知道有用的话。 【参考方案1】:

这是例外行为。默认情况下,UWP 应用不允许使用 Path。 UWP 应用具有受限的broadFileSystemAccess capability。此功能允许 UWP 应用访问系统中的所有文件。但是你只能使用Storage API通过路径获取文件。

对于您的场景,您可能需要检查 FFMpegArguments 对象是否有其他方法来创建实例,例如使用 steam。

【讨论】:

是的,我试图避免广泛的FileSystemAccess,因为我已经让用户使用选择器选择文件。是的,包装器确实收到了一个流,但我一直无法让它工作。我也收到拒绝访问错误,但这可能是由于我对读/写流的模糊理解,而不是实际的权限问题。包装器是github.com/rosenbjerg/FFMpegCore,如果知道有帮助的话。 您使用的 FFMpeg API 正在尝试使用 Path 获取文件,即使文件是使用 fileopenpicker 选择的。正如我在答案中提到的,这在 UWP 应用程序中是不允许的。

以上是关于你可以从它的路径访问一个选择的 StorageFile 吗? - UWP的主要内容,如果未能解决你的问题,请参考以下文章

如何从它的项目 ViewControllers 访问 UITabBarController 的变量

两个类相互引用/从它的委托方法中的 UITextField 访问 UITableViewCell?

图的遍历

如何从它的消息中分离异常类型

深度优先

深度优先搜索广度优先搜索