从 TagLib 到 QString、Qt C++的".mp3"元数据

".mp3" metadata from TagLib to QString, Qt, C++

本文关键字:mp3 元数据 C++ Qt TagLib QString      更新时间:2023-10-16

我正在尝试使用taglib和格式"艺术家 - 专辑-Song -Song(Year).mp3"重命名.mp3文件,然后将它们移至新目录,到目前为止,我使用

    TagLib::FileRef f(dirIt.filePath().toStdString().c_str());
    QString newName = f.tag()->artist().toCString() + " - " + f.tag()->album().toCString() + " - " + (QString) f.tag()->track() + " (" + (QString) f.tag()->year() + ")";
    QString newPath = NewDir.absolutePath() + QDir().separator() + newName + ".mp3";
    QFile::copy(oldDir, newPath);
    QFile::remove(dirIt.filePath().toStdString().c_str());

其中" dirit"是一个qdiriterator(我正在迭代歌曲所在的文件夹)和" olddir" QString,该QString带有我迭代的文件夹的绝对路径。

当我试图给出" newname"所需的值时,我的问题就来了,我得到了

错误:类型为" const char*"answers" const char [4]'的操作数无效 二进制"操作员 " qString newName = f.tag() -> Artist()。tocstring() " - " f.tag() -> pream()。 " - " (qString)f.tag() -> track() "(" (qString)f.tag() -> year()() ")";

我该如何解决?

使用格式字符串来构建新名称的字符串:

QString newName("%1% - %2% - %3% (%4%)");
newName = newName.arg(f.tag()->artist().toCString()).arg(f.tag()->album().toCString()).arg(f.tag()->track()).arg(f.tag()->year());