看來,當你試圖從一個MP3的評級標籤庫,並像它被打開就會造成讀取訪問衝突:標籤庫Qt的讀訪問衝突
這裏是我的代碼:
QFile fileInfo(file);
fileInfo.open(QIODevice::ReadOnly);
if(fileInfo.isReadable())
{
TagLib::MPEG::File mpeg(file.toStdString().c_str());
bool isRead = mpeg.isReadable(file.toStdString().c_str());
if(isRead)
rating = dynamic_cast<TagLib::ID3v2::PopularimeterFrame *>(mpeg.ID3v2Tag()->frameList("POPM").front())->rating();
}
我試過添加try/catch但仍然失敗。我試過QLockFile沒有成功。有沒有什麼方法可以測試一個文件是否擁有文件的獨佔權限或捕獲讀取訪問衝突?
更新 得益於尖端我修改代碼來檢查無效值第一:
if(mpeg.ID3v2Tag() != 0)
{
if(dynamic_cast<TagLib::ID3v2::PopularimeterFrame *>(mpeg.ID3v2Tag()->frameList("POPM").front()) != 0)
{
rating = dynamic_cast<TagLib::ID3v2::PopularimeterFrame *>(mpeg.ID3v2Tag()->frameList("POPM").front())->rating();
}
}
什麼是分裂這件事的好方法。當我第一次嘗試TagLib :: ID3v2 :: Tag * id3v2 = mpeg.ID3v2Tag();我得到ID3V2是未聲明的標識符 – adviner
奇怪,看起來有效的給我,如果'Tag'是在命名空間中有效的類型'標籤庫:: ID3v2' –