werde aus QDir::rename nicht schlau

Alles rund um die Programmierung mit Qt
Antworten
GoaSkin
Beiträge: 103
Registriert: 13. Juni 2007 00:14
Wohnort: Darmstadt

werde aus QDir::rename nicht schlau

Beitrag 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!"));
			}

Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Re: werde aus QDir::rename nicht schlau

Beitrag 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.
Antworten