QProcess und QFile::exists bei Pfaden mit Leerzeichen drin

Alles rund um die Programmierung mit Qt
Antworten
knallo
Beiträge: 9
Registriert: 11. August 2009 17:01

QProcess und QFile::exists bei Pfaden mit Leerzeichen drin

Beitrag 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ß
<QtCreator 4.5>
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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";
knallo
Beiträge: 9
Registriert: 11. August 2009 17:01

Beitrag 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?
<QtCreator 4.5>
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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...
knallo
Beiträge: 9
Registriert: 11. August 2009 17:01

Beitrag von knallo »

Danke für die Info.

Gruß
<QtCreator 4.5>
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

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