Seite 1 von 1

relativer Pfad zu absoluter Pfad

Verfasst: 18. Januar 2010 08:56
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...

Verfasst: 18. Januar 2010 11:02
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 ...

Verfasst: 18. Januar 2010 11:11
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 ... :)

Verfasst: 19. Januar 2010 04:09
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