[gelöst] Datei verschieben.

Alles rund um die Programmierung mit Qt
Antworten
BigBiber89
Beiträge: 10
Registriert: 19. Oktober 2010 18:59

[gelöst] Datei verschieben.

Beitrag 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?
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 »

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 ...
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
BigBiber89
Beiträge: 10
Registriert: 19. Oktober 2010 18:59

Beitrag 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?
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag 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.
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
BigBiber89
Beiträge: 10
Registriert: 19. Oktober 2010 18:59

Beitrag von BigBiber89 »

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 »

"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 »

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 »

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.
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
BigBiber89
Beiträge: 10
Registriert: 19. Oktober 2010 18:59

Beitrag 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;
}
BigBiber89
Beiträge: 10
Registriert: 19. Oktober 2010 18:59

Beitrag 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.
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

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)
Antworten