无法使用 TagLib 读取标签

can't read tag with TagLib

本文关键字:读取 标签 TagLib      更新时间:2023-10-16

从https://taglib.github.io/下载taglib 1.9,并按照INSTALL文件中提供的说明进行编译。

下面的代码崩溃,错误提示"程序意外完成"。

#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <taglib/mp4file.h> 
#include <taglib/mpegfile.h>
#include <taglib/fileref.h>
#include <taglib/taglib.h>
#include <taglib/tag.h>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    TagLib::FileName fn(QString("C:/Users/Bill/Desktop/02 Am I Wrong.mp3").toStdString().c_str());
    TagLib::FileRef ref(fn);
    qDebug() << QString::fromStdString(std::string(ref.tag()->artist().toCString()));
    return a.exec();
}

在调试模式下运行显示null解引用fileref.cpp at

bool FileRef::isNull() const
{
  return !d->file || !d->file->isValid();
}

运行Windows 10内部预览与静态构建Qt 5.0.2

我辛苦了又辛苦了,但没有发现任何有用的结果。

QString.toStdString()..c_str()返回的指针仅在QString对象仍然存在时有效。在你的例子中,它只在你创建它的那一行。
因此,要么保留对QString的引用,要么根本不使用QString。

TagLib::FileRef ref("C:/Users/Bill/Desktop/02 Am I Wrong.mp3");
qDebug() << ref.tag()->artist().toCString();

此外,您应该添加一些错误检查。下面是一个不使用qt的例子:

#include <taglib/fileref.h>
#include <taglib/taglib.h>
#include <taglib/tag.h>
int main(int argc, char *argv[])
{
    TagLib::FileRef ref("./Falco Benz - Hat Tricks (Original Mix).mp3");
    if(!ref.isNull() && ref.tag() != NULL) {
        std::cout << ref.tag()->artist().toCString() << std::endl;
    }
}

如果我省略错误检查,而文件不存在,我得到一个段错误