relativer Pfad zu absoluter Pfad

Alles rund um die Programmierung mit Qt
Antworten
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

relativer Pfad zu absoluter Pfad

Beitrag von JoseMan »

Hi und gesundes neues Jahr,
ich habe mal wieder ein Problem:
Ich habe ein relativen Pfad, z.b.: "../../MyOrdner/MyUnterOrdner".
Und ich habe ein aktuelles Verzeichnis, in dem ich mich befinde.
Di frage ist nun, wie bekomme ich den absoluten Pfad aus dem relativen Pfad?
Bisher dachte ich, ich kann das so machen:

Code: Alles auswählen

QString absoluteStr("d:/Test/MyTest");
QDir absolutePath(relativeStr);
QString absoluteDirString(absolutePath.absoluteFilePath("../../MyOrdner/MyUnterOrdner"));
Ich verstehe einfach nicht, wie das funktioniert.
Kann mir vlt. jemand helfen?

MfG J...
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Ich hab auch noch keine richtig passende loesung unter der QT gefunden.
Ich hab sowas oefters unter der stl per hand gemacht (pfade parsen), aber da iss auch ned der heilige Gral. Willst was aehnliches machen, schau Dir mal die boost::filesystem an. Bringt zwar nix was Dir direkt weiterhilft, aber für die Umsetzung könnt was intressantes bei sein .


ansonsten, ich finds ned schoen, aber zum testen:

Code: Alles auswählen

QString aktDir = QDir::currentPath();
QString absoluteStr("d:/Test/MyTest");
QSting strAbsolutePath;
QString strMyPath = relativeStr;

if(QDir::setCurrent(absoluteStr))
{
     QDir absolutePath(relativeStr); 
     if(absolutePath.makeAbsolute())
     {
             strMyPath = absolutePath.absolutePath ();
     }
     QDir::setCurrent(aktDir );

}
/// strMyPath weiterbenutzen .... 
Ciao ...
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

Beitrag von JoseMan »

Danke RHBaum,

ich werde das mal probieren.
@Boost
Gute Idee, ich möchte aber verhindern das die Abhängigkeiten zu viele werden, und Boost nur verwenden weil ich da eine Funktion haben will, mmhh, möchte ich wenns geht verhindern.
Aber ich kann mir das aufjeden Fall mal anschauen.

Danke

Ciao ... :)
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag von FaS »

Na, so schwer ist die Doku aber auch nicht zu verstehen.
Verschiedene Lösungen:

Code: Alles auswählen

  QString relativePath = "../../MyOrdner/MyUnterOrdner";

  // 1) reference is current directory

  // 1a)
  QString result = QDir( relativePath ).absolutePath();

  // 1b)
  QString result = QDir::cleanPath( QDir().absoluteFilePath( relativePath ) );

  // 2) reference is a QDir object (absolute or relative to current directory)
  QDir reference( absoluteStr );
  QString result = QDir::cleanPath( reference.absoluteFilePath( relativePath ) );
  
  // 3) reference is an already absolute QString and relative path is really relative
  QString result = QDir::cleanPath( absoluteStr + '/' + reallyRelativePath );
Gruß,
FaS
Antworten