Seite 1 von 1

[gelöst] Datei verschieben.

Verfasst: 19. Oktober 2010 20:43
von BigBiber89
Hallo,

ist mein erster Beitrag hier und komme gleich mit einen Problem :P

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?

Verfasst: 20. Oktober 2010 00:10
von padreigh
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 ...

Verfasst: 22. Oktober 2010 14:03
von BigBiber89
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?

Verfasst: 22. Oktober 2010 14:09
von padreigh
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.

Verfasst: 22. Oktober 2010 14:17
von BigBiber89
Die Ordner werden auf jeden Fall angelegt zB. funktioniert QFile::copy() aber das anschließende QFile::remove() wird wieder nicht gemacht.

Verfasst: 22. Oktober 2010 15:47
von solarix
"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..

Verfasst: 22. Oktober 2010 17:42
von BigBiber89
Die Dateien sind nicht schreibgeschützt und auf der Konsole verschieben kann ich auch Betriebssystem ist Windows 7 Professional falls das von Bedeutung ist.

Verfasst: 22. Oktober 2010 17:53
von padreigh
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.

Verfasst: 22. Oktober 2010 18:08
von BigBiber89
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;
}

Verfasst: 23. Oktober 2010 05:05
von BigBiber89
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.

Verfasst: 23. Oktober 2010 22:00
von 24dan
Hi ähhhh das Setzen als "[gelöst]" muss Du selber machen ....

....kannst Du es noch setzen?