按mp3-id3-tag对文件进行排序

时间:2014-12-18 17:55:07

标签: c# mp3

我从nuget获得了nuget包ID3.NET。我想通过他们的艺术家对mp3文件进行排序。但我真的不知道,使用带有mp3信息的文件的正确方法是什么。

DirectoryInfo rootDir = rootDir.GetFiles("*.mp3", SearchOption.AllDirectories);

foreach (FileInfo dir in fileList)
{
    Console.WriteLine("{0}", dir);

    using (var mp3 = new Mp3File(dir.FullName))
    {
       Id3Tag tag = mp3.GetTag(Id3TagFamily.FileStartTag);
       Console.WriteLine("Title: {0}", tag.Title.Value);
       Console.WriteLine("Artist: {0}", tag.Artists.Value);
       Console.WriteLine("Album: {0}", tag.Album.Value);
    }
}

通过例如对文件进行排序它们的大小,我使用这个工作代码。

fileList = rootDir.GetFiles(".", SearchOption.AllDirectories)
                  .Where(s => Worker.sExtensionFilerStrings
                  .Contains(Path.GetExtension(s.ToString()).ToLower()))
                  .OrderBy(jo => jo.Name);

1 个答案:

答案 0 :(得分:0)

以下是您的示例最小扩展以允许按标记排序:

string[] musicFiles = Directory.GetFiles(@"D:\mp3test", "*.mp3");


// a structure to hold the filename and the tags object:
public struct mp3FileTags
{
    public string fileName { get; set; }
    public Id3Tag tags { get; set; }
    public mp3FileTags(string fn, Id3Tag t) 
    { this = new mp3FileTags(); fileName = fn; tags = t; }
}

// we create a list of the mp3FileTags objects:
List<mp3FileTags> mp3s = new List<mp3FileTags>();

foreach (string musicFile in musicFiles)
{
    using (var mp3 = new Mp3File(musicFile))
    {
        Id3Tag tag = mp3.GetTag(Id3TagFamily.FileStartTag);
        mp3s.Add(new mp3FileTags(musicFile, tag));          // fill the list
    }
}

// now we can order it:
mp3s = mp3s.OrderBy(o => o.tags.Artists.ToString()).ToList();

// now we can use the ordered list:
foreach (mp3FileTags FTag in mp3s)
{
    Id3Tag tag = FTag.tags;
    Console.WriteLine("File: {0}", FTag.fileName);
    Console.WriteLine("Title: {0}", tag.Title.Value.);
    Console.WriteLine("Artist: {0}", tag.Artists.Value);
    Console.WriteLine("Album: {0}", tag.Album.Value);
}

您可能会注意到我如何避免使用List

的数组 顺便说一句:我不相信我是否会使用ID3.Lib;它似乎没有记录并被遗弃..

更新我已将结构中的直接Id3Tag替换为包含文件名和标记的结构。您可以在那里添加更多数据,一个FileInfo对象..