Alles rund um die Programmierung mit Qt
BigBiber89
Beiträge: 10 Registriert: 19. Oktober 2010 18:59
Beitrag
von BigBiber89 » 19. Oktober 2010 20:43
Hallo,
ist mein erster Beitrag hier und komme gleich mit einen Problem
Ich bin dabei eine Programm zu schreiben das mir MP3-Dateien in Ordner sortiert und dieses abhängig von den Metainfos
Im Folgenden Abschnitt tritt das Problem auf:
Code: Alles auswählen
void Sorter::sortInterpret(const QDir &dir, const QTextEdit &area){
QList<QString> *notMoved = new QList<QString>();
for(int i = 0; i < dir.entryList().length(); i++){
actualFile->setCurrentSource(Phonon::MediaSource(dir.path() + "/" + dir.entryList().value(i)));
qDebug(actualFile->currentSource().fileName().toStdString().c_str());
if(dir.entryList().value(i).endsWith(".mp3")){
QMap<QString, QString> map = actualFile->metaData();
QString artist = map.value("ARTIST");
qDebug(artist.toStdString().c_str());
if(artist != 0 && artist != ""){
if(dir.mkdir(dir.path() + "\\" + artist))
//area.append("Created: " + dir.path() + "\\" + album + "\n");
QString temp = dir.path() + dir.entryList().value(i);
QFile f(dir.path() + dir.entryList().value(i));
QString neu = dir.path() + "\\" + artist + "\\" + dir.entryList().value(i);
if(f.rename(neu)){
//area.append(QString("Moved: " + temp + "\n"));
//area.append(neu );
}
}else {
//area.append("Unable to move: " + (*i).path() + "\n");
notMoved->append(dir.entryList().value(i));
}
}
}
delete notMoved;
}
Der String bei artist ist leer obwohl die Meta-Tags in der Datei gesetzt sind.
Die MediaSource von MediaObject ist gesetzt habe ich mir auf der Konsole ausgeben lassen aber anscheinend werden die Meta-Tags nicht geladen.
Weiß irgendjemand wie sich das Problem beheben lässt?
Zuletzt geändert von
BigBiber89 am 24. Oktober 2010 15:55, insgesamt 2-mal geändert.
padreigh
Beiträge: 340 Registriert: 13. Mai 2010 10:06
Beitrag
von padreigh » 20. Oktober 2010 00:10
guck dir mal die Signale bei Phonon an, da gibts eins das abgesetzt wird wenn die Metainfo geladen ist ... vorher ist die halt nicht da ...
BigBiber89
Beiträge: 10 Registriert: 19. Oktober 2010 18:59
Beitrag
von BigBiber89 » 22. Oktober 2010 14:03
Das Prolem mit den Meta-Tags ist gelöst habe eine externe bibliothek genommen damit es funktioniert nun möchte ich habe eine Datei verschieben
mit folgenden Code:
Code: Alles auswählen
if(QFile::rename(QString(dir.path() + "/" + dir.entryList().value(i)), QString(dir.path() + "/" + artist + "/" + dir.entryList().value(i)))){
qDebug("erfolg");
}
Das Problem ist nur er macht es nicht? Also es ist beides auf der selben Partition
Ich habe mir auch mal beide Pfade ausgeben lassen die sehen zB. so aus:
.../Desktop/Die Ärzte/Die Ärzte - Wie Es Geht.mp3
.../Desktop/Die Ärzte/Die Ärzte/Die Ärzte - Wie Es Geht.mp3
Das heißt normal müsstees funktionieren oder nicht?
padreigh
Beiträge: 340 Registriert: 13. Mai 2010 10:06
Beitrag
von padreigh » 22. Oktober 2010 14:09
splitte den Einzeiler mal auf und benutz QDir um evtl. nicht vorhandene dirs vorher anzulegen ... ansonsten schau mal in error()/errorString() ob das gesetzt wird und was da dann drin steht.
BigBiber89
Beiträge: 10 Registriert: 19. Oktober 2010 18:59
Beitrag
von BigBiber89 » 22. Oktober 2010 14:17
Die Ordner werden auf jeden Fall angelegt zB. funktioniert QFile::copy() aber das anschließende QFile::remove() wird wieder nicht gemacht.
solarix
Beiträge: 1133 Registriert: 7. Juni 2007 19:25
Beitrag
von solarix » 22. Oktober 2010 15:47
"copy" geht, aber "remove" und "rename" gehen nicht? Die Quelldatei ist aber nicht zufälligerweise schreibgeschützt..... oder?
Ich meine funktioniert denn das Verschieben ab Konsole:
mv ".../Desktop/Die Ärzte/Die Ärzte - Wie Es Geht.mp3" ".../Desktop/Die Ärzte/Die Ärzte/Die Ärzte - Wie Es Geht.mp3"
?
hth..
BigBiber89
Beiträge: 10 Registriert: 19. Oktober 2010 18:59
Beitrag
von BigBiber89 » 22. Oktober 2010 17:42
Die Dateien sind nicht schreibgeschützt und auf der Konsole verschieben kann ich auch Betriebssystem ist Windows 7 Professional falls das von Bedeutung ist.
padreigh
Beiträge: 340 Registriert: 13. Mai 2010 10:06
Beitrag
von padreigh » 22. Oktober 2010 17:53
ich denke immer noch das da was schief läuft bei der Namensmanipuilation Platte->DB->rename
Teste wenigstens mal ob QFile::exists(QString(dir.path() + "/" + dir.entryList().value(i))) und lass dir das Aussagekräftig ausgeben falls nicht.
BigBiber89
Beiträge: 10 Registriert: 19. Oktober 2010 18:59
Beitrag
von BigBiber89 » 22. Oktober 2010 18:08
Die Dateien existieren wenn ich diese Abfrage einbaue komme ich darauf hinaus das die Ursrungsdateien existieren aber die nach verschobenen existieren hingegen nicht. hier ist noch mal die ganze Methode:
Code: Alles auswählen
void Sorter::sortInterpret(const QDir &dir, const QTextEdit &area){
QList<QString> *notMoved = new QList<QString>();
for(int i = 0; i < dir.entryList().length(); i++){
if(dir.entryList().value(i).endsWith(".mp3")){
TagLib::FileRef file(QString(dir.path() + "/" + dir.entryList().value(i)).toStdString().c_str());
QString artist = QString(file.tag()->artist().toCString());
if(artist != 0 && artist != ""){
if(dir.mkdir(artist))
;
qDebug(QString(dir.path() + "/" + dir.entryList().value(i)).toStdString().c_str());
qDebug(QString(dir.path() + "/" + artist + "/" + dir.entryList().value(i)).toStdString().c_str());
if(QFile::exists(dir.path() + "/" + dir.entryList().value(i)))
qDebug("exists");
else
qDebug("exists not");
if(QFile::rename(QString(dir.path() + "/" + dir.entryList().value(i)), QString(dir.path() + "/" + artist + "/" + dir.entryList().value(i)))){
qDebug("erfolg");
}
if(QFile::exists(QString(dir.path() + "/" + artist + "/" + dir.entryList().value(i))))
qDebug("exist 2");
else
qDebug("exists 2 not");
}else {
notMoved->append(dir.entryList().value(i));
}
}
}
delete notMoved;
}
BigBiber89
Beiträge: 10 Registriert: 19. Oktober 2010 18:59
Beitrag
von BigBiber89 » 23. Oktober 2010 05:05
Des Rätsellösung ist gefunden die Datein waren noch geöffnet währenddessen kann man ja nicht verschieben... also kann als gelöst markiert werden.
24dan
Beiträge: 274 Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg
Beitrag
von 24dan » 23. Oktober 2010 22:00
Hi ähhhh das Setzen als "[gelöst]" muss Du selber machen ....
....kannst Du es noch setzen?
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)