你可以从它的路径访问一个选择的 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 的变量