使用.NET Core读取扩展文件属性

问题描述

我正在尝试将.NET Framework应用程序移植到.NET Core。该应用程序读取文件的扩展属性,就像在“文件资源管理器”中右键单击文件时可以看到的一样:

enter image description here

在我的4.7.2 Framework应用程序中,代码如下所示:

using Microsoft.WindowsAPICodePack.Shell;
      
var shellFile = ShellFile.FromFilePath(file.FullName);
var title = shellFile.Properties.System.Title.Value;
var albumTitle = shellFile.Properties.System.Music.AlbumTitle.Value;

我的项目引用了这样的Shell代码

enter image description here

我需要在.NET Core应用程序中做什么才能访问Microsoft.WindowsAPICodePack.Shell的代码?还是.NET Core提供了另一种读取这些文件属性方法

在将此问题标记为重复之前

我知道已经问过类似的问题: Obtaining file extended properties in .Net Core

但是,这个问题是3年前的.NET Core很小的时候问的。 2个答案未解释如何读取文件的扩展属性。似乎回答的人们不理解扩展文件属性与从FileInfo可以得到的文件属性间的区别。也许这个问题还不够清楚?我还希望.NET Core能够得到足够的改进,以使此类旧功能可以再次使用。

解决方法

我不认为这些是文件属性。我猜这是MP3元数据存储在ID3标记中。

您正在使用可以读取此类元数据的.NET Framework NuGet软件包WindowsAPICodePack-Shell

选项#1

我找不到原始软件包的.NET Core版本。 但是我发现该库的一个非官方的.NET Core分叉:Microsoft-WindowsAPICodePack-Shell(它不是Microsoft编写的 )。

选项#2

对于.NET Core,您可以安装TagLibSharp NuGet软件包。 然后您就可以像这样读取元数据:

var file = new FileInfo("track.mp3");
var tagLibFile = TagLib.File.Create(file.Name);
var title = tagLibFile.Tag.Title;
var album = tagLibFile.Tag.Album;
var albumArtist = tagLibFile.Tag.AlbumArtists;
var genres = tagLibFile.Tag.JoinedGenres;
var length = tagLibFile.Properties.Duration;