не могу прочитать тег с помощью TagLib

Скачал taglib 1.9 из https://taglib.github.io/ и скомпилировано с инструкциями, приведенными в файле 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();
}

Запуск в режиме отладки покажет мне файл разыменования nure

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

Запуск предварительного просмотра инсайдерской версии Windows 10 со статической сборкой Qt 5.0.2

Я трудился и трудился и не нашел никакого полезного результата.

0

Решение

Указатель вернулся 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;
}
}

Если я пропускаю проверки ошибок, а файл не существует, я получаю segfault.

1

Другие решения


По вопросам рекламы [email protected]