我正在尝试使用StorageFolder API获取音乐库中每个文件的音乐属性。
在我的音乐库上调用GetFilesAsync(CommonFileQuery :: OrderByName)后,我正在迭代生成的IVectorView ^并为每个文件调用StorageFile-> Properties-> GetMusicPropertiesAsync(),这本质上很慢,但我必须这样做,因为Windows Phone不支持QueryOptions。
无论如何,在完成该任务之后,每个属性都是正确的,除了MusicProperties-> Year,这是2014年我手机上900多个音乐文件的每一个。这是一段简短的代码片段:
create_task(lib->GetFilesAsync(Search::CommonFileQuery::OrderByName))
.then([](IVectorView<StorageFile^>^ songFiles)
{
auto taskPtr = std::make_shared<std::vector<task<Song>>>(songFiles->Size);
for (size_t i = 0, len = songFiles->Size; i < len; ++i)
{
StorageFile^ song = songFiles->GetAt(i);
(*taskPtr)[i] = create_task(song->Properties->GetMusicPropertiesAsync()).then([]
(MusicProperties^ props)
{
Song s;
s.album = std::wstring(std::move(props->Album->Data()));
s.artist = std::wstring(std::move(props->Artist->Data()));
s.title = std::wstring(std::move(props->Title->Data()));
s.track = props->TrackNumber;
s.year = props->Year;
return s;
});
}
//further processing is done in a when_all function after the song tasks have completed
}
Song只是一个简单的结构,可以暂时保存我的结果并稍后将其转换为JSON,但那个Year属性让我感到非常震惊。有没有其他人遇到过这个问题,还有其他方法从音乐文件中检索正确的发行年份吗?