Seite 1 von 1

werde aus QDir::rename nicht schlau

Verfasst: 20. Januar 2009 19:16
von GoaSkin
Eine Routine in einem Programm durchsucht eine Verzeichnisstruktur nach inkompatiblen Dateien und Ordnern. Dabei müssen manchmal ganze Ordner entfernt werden.
Erkennt das Programm einen solchen Ordner, wird der Benutzer gefragt, ob er ihn löschen oder verschieben möchte. Mit letzerem gibt es Probleme. Der Befehl QDir::rename kopiert in diesem Falle den Ordner zum Ziel. Der alte Ordner wird nicht entfernt und QDir::rename liefert false zurück. Hier der Code:

Code: Alles auswählen

		if(removePlugin.clickedButton() == moveButton)
			{
			movePath.append(QFileDialog::getExistingDirectory(this, tr("select a folder to move the plugin into"),QDir::home().path(),QFileDialog::ShowDirsOnly));
			movePath.append("/");
			movePath.append(file.section('/',-1));
			DirObject=QDir(file);
			if(!(DirObject.rename(file,movePath)));
				QMessageBox::critical(this, tr("Cleanitool Express"),tr("The directory could not be moved. Check the directory permissions!"));
			}


Re: werde aus QDir::rename nicht schlau

Verfasst: 20. Januar 2009 21:52
von Strahlex
GoaSkin hat geschrieben:Eine Routine in einem Programm durchsucht eine Verzeichnisstruktur nach inkompatiblen Dateien und Ordnern. Dabei müssen manchmal ganze Ordner entfernt werden.
Erkennt das Programm einen solchen Ordner, wird der Benutzer gefragt, ob er ihn löschen oder verschieben möchte. Mit letzerem gibt es Probleme. Der Befehl QDir::rename kopiert in diesem Falle den Ordner zum Ziel. Der alte Ordner wird nicht entfernt und QDir::rename liefert false zurück. Hier der Code:

Code: Alles auswählen

		if(removePlugin.clickedButton() == moveButton)
			{
			movePath.append(QFileDialog::getExistingDirectory(this, tr("select a folder to move the plugin into"),QDir::home().path(),QFileDialog::ShowDirsOnly));
			movePath.append("/");
			movePath.append(file.section('/',-1));
			DirObject=QDir(file);
			if(!(DirObject.rename(file,movePath)));
				QMessageBox::critical(this, tr("Cleanitool Express"),tr("The directory could not be moved. Check the directory permissions!"));
			}

Ist der neue Pfad auf der gleichen Partition? In der Qt Doku steht nämlich dass er das sein muss.
EDIT: QDir::rename() benennt nur den Pfad um und verschiebt den Ordner nicht physisch.

PS: Nur QDir::rename(file,movePath) müsste auch funktionieren.