有没有正确的方法来通过其路径获取文件?

Rom*_*asz 14 c# win-universal-app windows-10 windows-10-mobile uwp

我在KnownFolders.VideosLibrary中有两个同名的文件,在这种情况下,我无法通过其名称访问文件,因此它只返回第一个文件.因此有没有其他方法来获取解析文件夹中所有文件的其他文件?

// this return two files 
var files = (await KnownFolders.VideosLibrary.GetFilesAsync()).Where(x => x.Name == "test.txt").ToArray();
// with this I can get only one file
StorageFile file = await KnownFolders.VideosLibrary.GetFileAsync("test.txt");
// of course I can parse it with query, but I would like to avoid it
// StorageFile myFile = (await KnownFolders.VideosLibrary.GetFilesAsync()).FirstOrDefault(x => x.FolderRelativeId == "something");
Run Code Online (Sandbox Code Playgroud)

我知道FutureAccessList,但它最多只能容纳1000个文件,这对我来说还不够.


请求后的一些澄清:

例如,让我们考虑使用SD卡在手机上运行应用程序.我在手机内存中的视频中有一个文件名test.txt,同名文件也存在于视频文件夹中的SD卡上.

在这种情况下,当您在上面的代码中调用第一行时,您将获得两个文件,以区分它们系统提供FolderRelativeId,因此具有相同名称的文件可以存在于一个"位置"中.如果您查看每个文件夹的完整路径,可能会有C:\Viedos\test.txt第二个文件夹D:\Videos\test.txt.

现在,第一次运行的用户选择了一个带有FilePicker的文件,我记得它的路径D:\Videos\test.txt.在应用程序的第二次运行中,我希望通过使用其路径(或除了有限的FutureAccessList之外的其他方法)来访问此文件.在过去我曾经这样做StorageFile.GetFileFromPathAsync(path);- 似乎它开始在W10中抛出UnauthorizedAccessException.

Her*_*rdo 0

根据MS 的文档,该应用程序可以选择不允许将文件存储在 SD 卡上。因此,媒体库可以分布在设备的内部存储和 SD 卡上

如果我做对了,你的解决方案将是:

  • 选择退出上述功能
  • 您现在应该只在本地设备上搜索,而不是 SD 卡
    • 这将导致每个目录中的文件名唯一
  • 如果您的用例还需要搜索 SD 卡上的文件,您现在必须访问 SD 卡,并在此处查询文件

我不确定单独访问 SD 卡的编码开销是否值得仅查询本地存储来提高性能。