【问题标题】:can't read tag with TagLib无法使用 TagLib 读取标签
【发布时间】:2015-07-22 13:43:48
【问题描述】:

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

使用静态构建的 Qt 5.0.2 运行 Windows 10 Insider Preview

我苦苦挣扎,没有找到有用的结果。

【问题讨论】:

    标签: c++ qt taglib


    【解决方案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;
        }
    }
    

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

    【讨论】:

    • 我通过一些错误检查扩展了答案,现在它可以工作了。您确定文件路径是正确的(并且如果需要,它已正确转义)?试试路径C:\\Users\\Bill\\Desktop\\02 Am I Wrong.mp3
    • 不能解决问题。 ref.isNull() 实现为 return !d-&gt;file || !d-&gt;file-&gt;isValid();。错误是因为fileNULL
    • 如果文件是NULL,由于return !d-&gt;file,函数将直接返回true。你的意思是说dNULL 吗?
    • 对不起,我的错。 dNULL。我已经用任何不存在的文件进行了测试,TagLib 报告了Could not open file。发生了什么事?
    • 在 Windows 上,QMultimedia 有效,但 Taglib 无效。在 Linux 上 Taglib 工作得很好,但 QMultimedia 不能工作。我完全搞砸了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多