TagLib-Sharp - изменение тегов файлов

Я собираюсь создать небольшой инструмент, который воссоздает все теги в моих 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)». Тег доступен только как получатель, но не как сеттер.

После этого я добавил несколько фреймов, но эти элементы имеют эффект установки тегов. Может, я неправильно его использую? Надеюсь, ты сможешь мне помочь!

С уважением,

СИЛУС


person SyLuS    schedule 08.12.2017    source источник


Ответы (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();

Надеюсь, это поможет. Если у вас есть дополнительные вопросы или приведенный выше код все еще не работает, не стесняйтесь комментировать. :)

person Fᴀʀʜᴀɴ Aɴᴀᴍ    schedule 24.02.2018