Qt Dir Rename File - Sporalischer Fehler?

Niv k

Mitglied
Hallo alle zusammen,

ich bastle derzeit an einem Tool, welches in einem gewählten Ordner die Namen von mp3 Dateien ordentlich umbenennt z.B.:

künstler_-_titel [HD] -> Künstler - Titel

So. Nun benutze ich als Hauptfunktion rename() von QDir. Bei der Doku steht, diese kann "failen" wenn: Die alte Datei (also der Name) nicht existiert oder wenn die Datei mit dem neuen Namen bereits existiert.
Nun beides ist nicht der Fall, wenn die Fehlermeldung kommt. Ich habe in meinem Code noch verschiedene Einstellungsmöglichkeiten z.B. Klammern samt Inhalte zu löschen. Ich habe zB ein Lied das so heißt:

ALEXANDRA STAN - Get Back (Asap).mp3

Lasse ich den Inhalt der Klammern, also -> Alexandra Stan - Get Back (asap).mp3 ) = Fehler!
Aber ist Löschen des Klammerinhalts aktiviert, funktioniert es -> Alexandra Stan - Get Back = Ja das kann man umbenennen!

Ist mir wirklich Rätselhaft. Das Einzige was auffällt ist, dass es meistens bei Namen mit Klammern, Punkten oder einzelnen Buchstaben auftritt. Ich kann es mir aber nicht erklären, wieso das nicht funktioniert und bei Google finde ich keine vernünftige Antwort dazu.

Hier mal die Hauptfunktion, die dafür zuständig ist:

Code:
void MainWindow::cleanFolder(QString Path) {
  QFileInfoList ListOfData;
  QString       CurrentName;
  QDir          CurrentFolder;
  QStringList   DataTypeFilter;
  QString       OldName;

  DataTypeFilter << "*.mp3" << "*.wav" << "*.ogg" << "*\\*";

  CurrentFolder = QDir(Path);

  CurrentFolder.setFilter(QDir::Files);
  CurrentFolder.setNameFilters(DataTypeFilter);
  ListOfData = CurrentFolder.entryInfoList();

  for (int i = 0; i < ListOfData.size(); i++) {
    CurrentName = ListOfData.at(i).fileName();
    OldName     = ListOfData.at(i).fileName();
    CurrentName = CurrentName.replace("_"," ");
    CurrentName = CurrentName.toLower().replace(0,1,CurrentName.at(0).toUpper());
    CurrentName = removeUserDefiendTagsFromString(CurrentName);

    if (mpGUI->Action_DeleteBrackets->isChecked()) {
      CurrentName = removeBracketsFromString(CurrentName);
    }

    if (mpGUI->Action_DeleteTags->isChecked()) {
       CurrentName = removeTagsFromString(CurrentName);
    }

    if (mpGUI->Action_DelteUmlauts->isChecked()) {
        CurrentName = removeUmlauts(CurrentName);
    }

    if (mpGUI->Action_DelteSpecialCharacters->isChecked()) {
        CurrentName = removeSpecialCharactersFromString(CurrentName);
    }

    if (mpGUI->Action_DeleteNumbers->isChecked()) {
        CurrentName = removeNumbersFromString(CurrentName);
    }

    for (int i2 = 0; i2 < CurrentName.length(); i2++) {
      if ((CurrentName.at(i2) == ' ' || CurrentName.at(i2) == '-') && i2 == 0) {
        CurrentName.replace(i2,1,"");
        i2 = 0;
      }

      if (CurrentName.at(i2) == ' ') {
        if (CurrentName.at(i2+1) == '.') {
          CurrentName.replace(i2,1,"");
        } else {
          CurrentName.replace(i2,1,CurrentName.at(++i2).toUpper());
        }
      }

      if (CurrentName.at(i2) == '-') {
        if (CurrentName.at(i2-1) != ' ') {
          CurrentName.replace(i2,1," -");
        }
        if (CurrentName.at(i2+1) != ' ') {
          CurrentName.replace(i2,1,"- ");
        }
      }
    }

    if (!CurrentFolder.rename(OldName,CurrentName) && OldName != CurrentName) {
      QMessageBox::information(this,"Fehler",QString("Datei %1 konnte nicht umbenannt werden!").arg(ListOfData.at(i).absoluteFilePath()));
    }
  }

  CurrentFolder.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
  CurrentFolder.setNameFilters(QStringList());
  ListOfData = CurrentFolder.entryInfoList();

  for (int i = 0; i < ListOfData.size(); i++) {
    cleanFolder(ListOfData.at(i).absoluteFilePath());
  }
}
 
Hallo alle zusammen,

ich denke ich bin dem auf die Schliche gekommen! Der Fehler scheint darin zu liegen, dass bei dem Vergleich, ob die Datei bereits exestiert nicht zwischen groß und Kleinschreibung unterschieden wird.

Wenn er also ALEXANDRA STAN - Get Back (Asap).mp3 ohne Klammerentfernung umbenennt nach Alexandra Stan - Get Back (asap).mp3, sagt er "Nein, das gibt es schon!".

Die Frage ist also, wie kann ich das verhindern?...
Gibt es da eine bestimmte Methode oder irgendwas?
Ansonsten würde ich ein Workarround erschaffen, das es erst nach Name - KOPIE umbenennt und diese dann wieder anders. Aber das ist eigentlich unsauber, oder?

Wer etwas weiß, bitte melden!
Dankeschön!
 
Das liegt an Windows, es macht bei Groß-/ und Kleinschreibung keinen Unterschied und sagt das die Datei schon gibt.
Einzige Lösung: Doppelt Umbennen (zb zuerst .tmp Anhängen und dann so wie du es haben willst)
 
Jap... Danke für die Antwort. So habe ich das Problem jetzt auch gelöst... War mir nich klar, dass Windows das so macht, weshalb ich auch den Fehler nicht verstanden hatte. Zunächst.
 

Neue Beiträge

Zurück