无法使用 TagLib 读取标签
can't read tag with 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解引用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;
}
}
如果我省略错误检查,而文件不存在,我得到一个段错误
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 无法找到/读取配置文件.conf-FileIOException
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++将文本文件中的数据读取到结构数组中
- 正在将csv文件读取为双精度矢量
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么在读取文件大小时文件IO速度会发生变化
- C 提升ifstream读取文件内容,带有白色空间,折断,标签等
- 正确读取被ID3标签干扰的MP3文件
- 从文件中读取HTML标签并在终端中正确显示它们
- 编码和读取 ID3 标签
- 读取以tiff文件编码的标签
- 如果要读取随机森林(opencv3.0)的xml文件,则标签类型必须为float
- 无法使用 TagLib 读取标签
- 使用QXmlStreamReader读取XML标签内的值