首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用TagLib读取标记

无法使用TagLib读取标记
EN

Stack Overflow用户
提问于 2015-07-22 21:43:48
回答 1查看 1K关注 0票数 0

https://taglib.github.io/下载了标记库1.9,并按照安装文件中提供的说明进行了编译。

下面的代码崩溃,并显示错误"The program has unexpectedly“。

代码语言:javascript
复制
#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();
}

在调试模式下运行时在以下位置显示空的取消引用fileref.cpp

代码语言:javascript
复制
bool FileRef::isNull() const
{
  return !d->file || !d->file->isValid();
}

使用静态构建的Qt 5.0.2运行Windows 10内部预览版

我辛勤地工作,却没有发现任何有用的结果。

EN

回答 1

Stack Overflow用户

发布于 2015-07-23 05:32:34

只有在QString对象仍处于活动状态时,QString.toStdString()..c_str()返回的指针才有效。在您的例子中,这只在您创建它的那一行上。

因此,要么保留对QString的引用,要么根本不使用QString。

代码语言:javascript
复制
TagLib::FileRef ref("C:/Users/Bill/Desktop/02 Am I Wrong.mp3");
qDebug() << ref.tag()->artist().toCString();

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

代码语言:javascript
复制
#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;
    }
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31564939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档