Pet*_*ber 3 c# windows-api-code-pack .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;
Run Code Online (Sandbox Code Playgroud)
我的项目引用了这样的 Shell 代码:
我需要在 .NET Core 应用程序中执行哪些操作才能访问 Microsoft.WindowsAPICodePack.Shell 的代码?或者 .NET Core 是否提供了另一种读取这些文件属性的方法?
在将此问题标记为重复之前
我知道已经有人问过类似的问题: Obtaining file Extended Properties in .Net Core
然而,这个问题是 3 年前提出的,当时 .NET Core 还很年轻。这两个答案没有解释如何读取文件的扩展属性。似乎回答的人不理解扩展文件属性和可以从中获取的文件属性之间的区别FileInfo。也许问题还不够清楚?我还希望 .NET Core 已经得到足够的改进,以便可以再次使用此类遗留功能。
我不认为这些是文件属性。我猜,它是MP3存储在ID3标签中的元数据。
您正在使用WindowsAPICodePack-Shell可以读取此类元数据的 .NET Framework NuGet 包。
我找不到原始包的 .NET Core 版本。但我发现了该库的非官方 .NET Core 分支:(Microsoft-WindowsAPICodePack-Shell它不是由 Microsoft 创作的)。
对于 .NET Core,您可以安装TagLibSharpNuGet 包。然后你只需读取这样的元数据:
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;
Run Code Online (Sandbox Code Playgroud)