【发布时间】:2019-12-29 06:24:24
【问题描述】:
歌词嵌套在音乐文件中,不是从互联网上下载的。 MusicProperties 没有这个属性。
我尝试使用Id3 包来读取它,这需要文件的路径。但是,在 UWP 中,似乎无法使用 C:/Users/Seaky/Desktop/Music/SomeMusic.mp3 之类的路径访问文件(至少对我不起作用,因为即使使用 broadFileSystemAccess,我的权限也被拒绝。
我还能尝试什么?
【问题讨论】:
歌词嵌套在音乐文件中,不是从互联网上下载的。 MusicProperties 没有这个属性。
我尝试使用Id3 包来读取它,这需要文件的路径。但是,在 UWP 中,似乎无法使用 C:/Users/Seaky/Desktop/Music/SomeMusic.mp3 之类的路径访问文件(至少对我不起作用,因为即使使用 broadFileSystemAccess,我的权限也被拒绝。
我还能尝试什么?
【问题讨论】:
我找到了一种方法,因为Mp3 在其构造函数中接受了一个 Stream 对象。因此,我能够做到这一点:
public async Task<string> GetLyrics()
{
var file = await StorageFile.GetFileFromPathAsync(Path);
using (var stream = await file.OpenAsync(FileAccessMode.Read))
{
using (var mp3 = new Mp3(stream.AsStream()))
{
var lyrics = mp3.GetTag(Id3TagFamily.Version2X).Lyrics;
return lyrics.Count > 0 ? lyrics[0].Lyrics : "";
}
}
}
【讨论】:
从选定数量文件夹之外的 UWP 应用程序访问文件需要额外的权限。
正如您所指出的,您已将 broadFileSystemAccess 功能添加到您的应用清单中,这应该允许访问最终用户有权访问的任何文件。
broadFileSystemAccess 功能仍需要最终用户授权应用程序。如果指定了broadFileSystemAccess 功能并且尚未授予权限,则通常会提示最终用户执行此操作,但是,在某些情况下,这是broken。因此,您可以通过 Windows“应用程序和设置”设置页面下的“高级设置”链接来检查应用程序是否具有所需的权限。
如果您对路径进行硬编码,您可以尝试让最终用户使用FileOpenPicker 来选择文件,看看是否会有所不同。
有更多关于文件访问权限的信息here。
【讨论】:
GetLyrics 评论区。例外是System.UnauthorizedAccessException:“Access to the path 'C:\Users\Seaky\Desktop\Media\Music\Justin Bieber\Baby.mp3' is denied.”