TagLib-Sharp - 重新标记文件

Posted

技术标签:

【中文标题】TagLib-Sharp - 重新标记文件【英文标题】:TagLib-Sharp - Retagging files 【发布时间】:2017-12-08 16:02:24 【问题描述】:

我即将创建一个小工具,它可以重新创建我的 mp3 文件上的所有标签。 因为它们一团糟,我想删除所有标签并使用正确的值重新创建它们。

这样做我遇到了我无法设置标签值的问题。 但问题是,我无法设置标签。我有以下代码:

File tagLibFile = File.Create(filePath);
tagLibFile.RemoveTags(TagLib.TagTypes.AllTags);
tagLibFile.Tag.Album = album;
tagLibFile.Tag.AlbumArtists = artists.ToArray();
tagLibFile.Tag.Track = track;
tagLibFile.Tag.Title = title;
tagLibFile.Tag.TitleSort = titleSort;
...
tagLibFile.Save();

文件被正确读出。然后标签被删除。 但在那之后设置标签不起作用。标签内的字符串仍然为空。 我还没有见过像“tagLibFile.SetTag(Tag t)”这样的方法。 Tag 只能用作 getter,但不能用作 setter。

之后我添加了一些框架,但这并没有设置标签的效果。也许我以错误的方式使用它? 希望你能帮我解决这个问题!

亲切的问候,

体系结构

【问题讨论】:

【参考方案1】:

我猜在删除标签后,TagLib#(或 TagLib,就此而言)不会创建新标签来保存信息。但是,当打开一个文件时,它可能会做一些检查,如果文件没有,它会创建一个新标签。

因此,作为一种解决方法,您可以在删除标签后保存文件一次,然后继续添加新的标签信息。

File tagLibFile = File.Create(filePath);
tagLibFile.RemoveTags(TagLib.TagTypes.AllTags);
// Save the file once, so that Taglib Sharp takes care of creating any necessary tags when opening the file next time and dispose the file reference:
tagLibFile.Save();
tagLibFile.Dispose();

您可以在再次打开文件后继续编辑标签:

tagLibFile = File.Create(filePath);
tagLibFile.Tag.Album = album;
tagLibFile.Tag.AlbumArtists = artists.ToArray();
tagLibFile.Tag.Track = track;
tagLibFile.Tag.Title = title;
tagLibFile.Tag.TitleSort = titleSort;
// ...

记得在编辑完标签后再次保存文件:

tagLibFile.Save();

我希望这会有所帮助。如果您还有其他问题,或者上面的代码仍然无法正常工作,请随时发表评论。 :)

【讨论】:

以上是关于TagLib-Sharp - 重新标记文件的主要内容,如果未能解决你的问题,请参考以下文章

如果没有关键字,则无法添加图像关键字,Taglib-Sharp

APEv1 标签标识符是啥?

如何使用 taglib-sharp?

taglib-sharp 中是不是有与 Label/Publisher 等效的字段?

使用 Taglib-Sharp 操作用户定义的标签(TXXX 帧)

在我当前的 vb.net 解决方案中添加 taglib-sharp 项目解决方案时遇到困难