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

Reading extended file properties with .NET Core

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

在我的 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 代码:

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

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

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

然而,这个问题是 3 年前提出的,当时 .NET Core 还很年轻。 2 个答案没有解释如何读取文件的扩展属性。似乎回答的人不明白 扩展文件属性 和可以从 FileInfo 获得的文件属性之间的区别。也许问题不够清楚?我也希望 .NET Core 已经有了足够的改进,可以再次使用这些遗留功能。

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

您正在使用可以读取此类元数据的 .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;