Relativer Pfad



  • Hallo!

    Wie bekomme ich von einem absoluten Pfad, den Relativen zu einem bestimmten Ordner?
    z.B.: C:\Ordner1\Ordner2\foo.txt relativ zu C:\Ordner1\xxx\ = ..\Ordner2\foo.txt

    Danke schon mal im Voraus!



  • da gibts win api befehle du du per invoke ansprechen kannst - wie die jetzt genau heißen weiß ich leider nicth mehr





  • da gibts win api befehle du du per invoke ansprechen kannst - wie die jetzt genau heißen weiß ich leider nicth mehr

    ich glaub das so ein winapi befehl hier verwendet wird 😉
    http://rsn.gamedev.net/tutorials/ms3danim.asp



  • In dem Thread auf MyCSharp.de geht es leider nicht um einen Relativen Pfad und die WinAPI kann ich nicht verwenden, da das ganze Cross-Platform compatible sein muss.
    Ich habe kurzerhand beschlossen selbst eine passenbe Funktion zu schreiben:

    private string GetRelativePath(string baseDir, string absPath) {
    	if (Directory.GetDirectoryRoot(baseDir) != Directory.GetDirectoryRoot(absPath))
    		return absPath;
    	int i = 0;
    	while (Char.ToLower(baseDir[i]) == Char.ToLower(absPath[i])) {		// see how much of the path matches
    		++i;
    		if (i == baseDir.Length) {
    			absPath = absPath.Substring(i);
    			if (!absPath.StartsWith("." + Path.DirectorySeparatorChar)) {
    				if (absPath[0] != Path.DirectorySeparatorChar)
    					absPath = Path.DirectorySeparatorChar + absPath;
    				absPath = '.' + absPath;
    			}
    			return absPath;
    		}
    	}
    	while (baseDir[i] != Path.DirectorySeparatorChar)	// trace back to the last matching directory
    		--i;
    	string relPath = absPath.Substring(i);
    	baseDir = baseDir[baseDir.Length - 1] == Path.DirectorySeparatorChar ? baseDir.Substring(i, baseDir.Length - i - 1) : baseDir.Substring(i);
    	int dirsInBase = 0;
    	for (i = 0; i < baseDir.Length; ++i) {
    		if (baseDir[i] == Path.DirectorySeparatorChar)
    			dirsInBase++;
    	}
    	System.Text.StringBuilder sb = new System.Text.StringBuilder();
    	string dirUp = Path.DirectorySeparatorChar + "..";
    	for (i = dirsInBase; i > 0; --i)
    		sb.Append(dirUp);
    	return '.' + sb.ToString() + relPath;
    }
    

    Danke trotzdem für die Tipps!

    *EDIT: Fehler in der Funktion korrigiert, jetzt funzt es sicher richtig :)!


Anmelden zum Antworten