Laufzeitfehler beim Aufruf von QDir::setCurrent()

Alles rund um die Programmierung mit Qt
Antworten
Matthias_
Beiträge: 16
Registriert: 4. April 2009 13:45

Laufzeitfehler beim Aufruf von QDir::setCurrent()

Beitrag von Matthias_ »

Um meine Anwendung auch von anderen Orten korrekt starten zu können, setze ich zu Beginn den aktuellen Pfad mit QDir::setCurrent(), welchen ich aus der registry auslese:

Code: Alles auswählen

QSettings *setting = new QSettings(QSettings::SystemScope, "MeinProgramm", "Directories");
QString path = setting->value("ExecutablePath").toString();

QDir::setCurrent(path);
Leider bekomme ich dabei jedes mal die Fehlermeldung :
Expression: (L"Buffer too small" && 0)
Ihch abe diese Zeile schon öfters debuggt und festgeselt das der Pfad richtug aus der Registry gelesen und der Funktion übergeben wird.

Kenn jemand das Problem und weiß wie man es lösen kann ?
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Re: Laufzeitfehler beim Aufruf von QDir::setCurrent()

Beitrag von neuschi »

Matthias_ hat geschrieben: QString path = setting->value("ExecutablePath").toString();
Wie lautet "path" an dieser Stelle? (qDebug() << path; )

Evtl. Probleme mit dem Backslash?

Was passiert, wenn du QDir::setCurrent() mit dem gleichen Wert als konstantem String aufrufst?

Code: Alles auswählen

QDir::setCurrent("c:\Programme\Projekte\Test"); 
Oder versuch mal folgendes:

Code: Alles auswählen

QDir tmp( setting->value("ExecutablePath").toString());

QDir::setCurrent( tmp.absolutePath());

\Ralf
Matthias_
Beiträge: 16
Registriert: 4. April 2009 13:45

Beitrag von Matthias_ »

Es tutet :D :D :D

Ich habe mal deinen Varante versucht und die funktioniert einwandfrei :D

Mein Pfad hört mit einem Backslash auf, geht aber mit und ohne.^^
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Beitrag von neuschi »

Matthias_ hat geschrieben: Mein Pfad hört mit einem Backslash auf, geht aber mit und ohne.^^
Das meinte ich aber nicht. Evtl. sind die Backslashes in deinem String nicht richtig maskiert, so dass z.B. bei "c:\Programme...." der Backslash und das 'P' nicht 2 Zeichen sind, sondern das als Sonderzeichen "\P" interpretiert wird. Daher die Bitte: poste mal deinen String, dann können wir evtl. erkennen, was dort falsch läuft.

Zum Debuggen bspw. mal folgendes einbauen:

Code: Alles auswählen

QString path = setting->value("ExecutablePath").toString(); 
qDebug() << path << "("<< path.length()<<")";

QDir tmp( setting->value("ExecutablePath").toString());

QString path2 =  tmp.absolutePath() ;
qDebug() << path2 << "("<< path2.length()<<")";
Es ist ja schön, dass die andere Variante funktioniert, aber es wäre schon schön zu wissen, wo das Problem lag.

Gruß,
Ralf
Antworten