无法使用TagLib读取标记

时间:2015-07-22 13:43:48

标签: c++ qt taglib

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 dereference fileref.cpp
bool FileRef::isNull() const
{
  return !d->file || !d->file->isValid();
}

使用静态内置Qt 5.0.2运行Windows 10内幕预览

我辛苦劳作,没有找到任何有用的结果。

1 个答案:

答案 0 :(得分:1)

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;
    }
}

如果我省略错误检查,并且文件不存在,我会收到段错误。