Seite 1 von 1

[gelöst] relativer Pfad, absoluter Pfad

Verfasst: 2. April 2009 15:15
von softwaremaker
Meine Programm-Verzeichnisstruktur soll sein:
..\Bin (hier ist die Applikation + DLLs drinnen)
..\Data (Dateien mit Einstellungen usw.)
..\Resource (Sprachdateien, Icons, ...)

Von der Applikation im Unterordner "Bin" möchte ich auf Dateien in z.B. Unterordner "Data" zugreifen.
Derzeit mache ich das so:

Code: Alles auswählen

    QDir    path(QCoreApplication::applicationDirPath());
    path.cdUp();
    QFile file( path.absolutePath() + QDir::separator() + "Data" + QDir::separator() +"settings.xml" );
ist aber nicht optimal wegen cdUp, ich will den Pfad relativ angeben, also so:
QCoreApplication::applicationDirPath() + "../Data/" + "settings.xml"
wie soll ich dass machen?

Verfasst: 2. April 2009 16:36
von pfid
Wie du schon selbst geschrieben hast:

Code: Alles auswählen

QDir path(QCoreApplication::applicationDirPath() + "../Data");
Aber wo genau ist jetzt der Unterschied zwischen

Code: Alles auswählen

    QDir path(QCoreApplication::applicationDirPath());
    path.cdUp(); 
und

Code: Alles auswählen

QCoreApplication::applicationDirPath() + "../Data/" + "settings.xml" 
?

relativer Pfad

Verfasst: 2. April 2009 17:17
von softwaremaker
mittels relativen Pfad:
QCoreApplication::applicationDirPath() + "../Data/" + "settings.xml"
ist es möglich, diesen auch in einer Eingabemaske für den Benutzer änderbar zu machen, bzw. den rel. Pfad in einer Datei zu speichern.

Ich möchte z.B. auch folgendes in einer Datei speichern können:
[Einstellungen]
Pfad="../Data/"
IstRelativ=1

oder
Pfad="d:/netzlaufwerk/Data/"
IstRelativ=0

Verfasst: 2. April 2009 17:24
von pfid
Ja dann tus doch :)

ja aber wie

Verfasst: 2. April 2009 18:49
von softwaremaker
ja aber wie?

was muss ich bei
QFile file(...) angeben?
denn
QFile file(QCoreApplication::applicationDirPath() + "../Data/" + "settings.xml");
klappt ja nicht.

Verfasst: 2. April 2009 19:16
von Christian81
doch... allerdings fehlt laut Doku wohl ein Separator...

habs jetzt selbst gefunden

Verfasst: 3. April 2009 01:43
von softwaremaker
die Lösung is QDir::cleanPath

QDir::cleanPath( QCoreApplication::applicationDirPath() + QDir::separator()
+ "../Data" + QDir::separator() +"settings.xml");
Wenn die Applikation in myprog/Bin ist dann kommt man so auf myprog/Data/settings.xml
cleanPath entfernt ".." und löst entsprechend auf (geht also ein Verzeichnis zurück).

Verfasst: 3. April 2009 06:33
von Christian81
QDir::separator() ist überflüssig - ein '/' reicht.