This is a very popular metadata reader & writer, not just for MP3s:
GitHub - mono/taglib-sharp: LIbrary for reading and writing metadata in media files[
^]
Just gave the lib a try. Here is my test code used:
private static void Main(string[] args)
{
var path = @"E:\Music";
foreach (var file in System.IO.Directory.GetFiles(path))
{
ProcessFile(file);
}
Console.ReadKey();
}
static void ProcessFile(string Filename)
{
Console.WriteLine("Filename: ", Filename);
TagLib.File file = TagLib.File.Create(Filename);
Console.WriteLine("Name: ", file.Name);
Console.WriteLine("Current picture count: " + file.Tag.Pictures.Length);
for (int i = 0; i < file.Tag.Pictures.Length; i++)
{
var pic = file.Tag.Pictures[i];
Console.WriteLine("{0} Description: {1} / {2}", i + 1, pic.Description, pic.Type);
}
}
Update:
Here is recursive directory added:
internal static class Program
{
private static void Main(string[] args)
{
var path = @"E:\music";
ProcessDirectories(path);
Console.ReadKey();
}
private static void ProcessDirectories(string startPath)
{
foreach (string dir in System.IO.Directory.GetDirectories(startPath))
{
Console.WriteLine("Dir: {0}", dir);
ProcessFiles(dir);
ProcessDirectories(dir);
}
}
private static void ProcessFiles(string dir)
{
foreach (var file in System.IO.Directory.GetFiles(dir))
{
if (System.IO.Path.GetExtension(file).Equals(".mp3", StringComparison.InvariantCultureIgnoreCase))
{
ProcessFile(file);
}
}
}
private static void ProcessFile(string Filename)
{
Console.WriteLine(" - File: {0}", Filename);
TagLib.File file = TagLib.File.Create(Filename);
Console.WriteLine(" Name: ", file.Name);
Console.WriteLine(" Picture count: " + file.Tag.Pictures.Length);
for (int i = 0; i < file.Tag.Pictures.Length; i++)
{
var pic = file.Tag.Pictures[i];
Console.WriteLine(" {0} Description: {1} / {2}", i + 1, pic.Description, pic.Type);
}
}
}