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
taglib-sharp 中是不是有与 Label/Publisher 等效的字段?