Seite 1 von 1

QProcess und QFile::exists bei Pfaden mit Leerzeichen drin

Verfasst: 20. August 2009 17:11
von knallo
Hallo!

Ich habe ein Programm zum starten externer Programme geschrieben.
Das funktioniert jetzt auch einwandfrei, zumindest wenn ich Pfade ohne Leerzeichen habe.
Bei Pfaden mit Leerzeichen passiert nichts.

Ob jetzt das Prüfen ob die Datei existiert (QFile::exists) oder das Starten des Prozesses (QProcess) Probleme bereitet, kann ich leider nciht sagen - ich kann ja leider nicht debuggen...

Hier mal die relevanten Code-Zeilen:

Code: Alles auswählen

[...]
    QString		aProgramm;
    QProcess	myProcess;
    map<int,QLineEdit*>::iterator   iter_2;
[...]
	else
	{   aProgramm=iter_2->second->text();	// hier wird der Programmpfad ausgelesen (steht im QLineEdit)
		if(QFile::exists(aProgramm))		// wenn die Datei existiert
		myProcess.startDetached(aProgramm);	// starten ohne auf irgendwas zu warten
	}
[...]
Könnt ihr mir weiterhelfen?

Gruß

Verfasst: 20. August 2009 18:13
von solarix
1. "startDetached()" ist static.... richtig(er) wäre also "QProcess::startDetached(aProgramm);"
2. Hast du den Aufruf schonmal als String ("\"" + aProgramm + "\"") versucht?
3. Hast du es schon mit einer QProcess-Instanz und "setWorkingDirectory" versucht?
ich kann ja leider nicht debuggen...
Aber Konsolen-Ausgaben wirst du schon lesen können.. oder? Also:

Code: Alles auswählen

 
  qDebug() << "Starte Programm" << aProgramm;
  if(QFile::exists(aProgramm)){      // wenn die Datei existiert
    qDebug() << "existiert";
    qDebug() << "start:" << QProcess::startDetached(aProgramm);  
  } else
    qDebug() << "nicht gefunden";

Verfasst: 20. August 2009 18:52
von knallo
Danke, Punkt 2 hat das Problem gelöst! :)

Punkt 1 habe ich anschließend auch dementsprechend umgeändert, da würde mich aber noch die Erklärung interessieren, warum das richtig(er) ist?

Verfasst: 20. August 2009 20:14
von solarix
Punkt 1 habe ich anschließend auch dementsprechend umgeändert, da würde mich aber noch die Erklärung interessieren, warum das richtig(er) ist?
Weil
- die Instanz unnötig ist
- eher Fehler einschleichen (z.B. "myProcess.setWorkingDirectory(...); myProcess.startDetached(...);" macht nicht das, was es scheint)
- je nach Compiler eine Warnung ausgegeben wird - und man hat sein Code frei von Warnungen zu halten..

hth...

Verfasst: 20. August 2009 20:22
von knallo
Danke für die Info.

Gruß

Verfasst: 21. August 2009 12:27
von tribari
Ich hatte dasselbe Problem - und zwar braucht das Programm welches ich mit QProcess starten wollte keine Parameter.

Ergo habe ich die Datei einfach über

Code: Alles auswählen

process.start("D:\beispiel.exe");
gestartet... jedoch gab es genauso wie bei dir, probleme wenn Leerzeichen im Pfad waren...

Durch ein wenig rumprobieren hat folgende Lösung geholfen:

Code: Alles auswählen

void QProcess::start ( const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite ) 
verwenden.

Und zwar mit einer leeren QStringList sofern keine Parameter vorhanden sind.

Code: Alles auswählen

QStringList args;
process.start("D:\beispiel.exe",args);

Ich hoffe ich konnte helfen ;)