我将如何使用 taglib 来提取整个 mp3 文件文件夹的 id3 标签,我目前只能让它一次提取一个 mp3 文件的说流派标签。我需要能够提取 id3从 mp3 文件的整个文件夹中标记。
然后需要将与所需类型匹配的 mp3 文件复制到一个新的文件夹位置,我已经能够为一个 mp3 文件而不是多个文件执行此操作。
我将如何使用 taglib 来提取整个 mp3 文件文件夹的 id3 标签,我目前只能让它一次提取一个 mp3 文件的说流派标签。我需要能够提取 id3从 mp3 文件的整个文件夹中标记。
然后需要将与所需类型匹配的 mp3 文件复制到一个新的文件夹位置,我已经能够为一个 mp3 文件而不是多个文件执行此操作。
您需要浏览目录中的所有文件并检查每个文件是否具有所需的流派。
为此,您可以使用一些 LINQ:
string genre = "Hip-Hop, Rock"; // Change as required... You can also provide a single genre or even more than 2.
var matchingFiles = Directory.GetFiles(@"Folder\SubFolder", "*.mp3", SearchOption.AllDirectories).Where(x => { var f = TagLib.File.Create(x); return ((TagLib.Id3v2.Tag) f.GetTag(TagTypes.Id3v2)).JoinedGenres == genre; });
foreach (string f in matchingFiles)
{
System.IO.File.Move(f, Path.Combine(@"D:\NewFolder", new FileInfo(f).Name));
}
我还想指出,如果文件有多种流派,您甚至可以设置标准来选择包含该流派的所有文件:
var matchingFiles = Directory.GetFiles(@"Folder\SubFolder", "*.mp3", SearchOption.AllDirectories).Where(x => { var f = TagLib.File.Create(x); return ((TagLib.Id3v2.Tag) f.GetTag(TagTypes.Id3v2)).Genres.Contains(genre); });
例如,当genre
设置为时,上面将选择具有以下类型的文件Hip-Hop
:
Hip-Hop
Hip-Hop, Rock
Hip-Hop, Trap
Hip-Hop, Rock, Punk, Trap
上面这组流派显然是不现实的。这只是一个例子:)