Folgendes:
Ich möchte zu einem Dateinamen den relativen Pfad bzgl. eines anderen Ordners bestimmen, und später daraus wieder den vollständigen Pfad zurückbekommen.
Das geht ja so:
Delphi-Quelltext
1:
| RelativerPfad := ExtractRelativePath(BaseName, VollstaendigerDateiname); |
Beispiel: Ich möchte in einer Datei
Basename := 'd:\Playlists\test.m3u' den relativen Pfad zu
VollstaendigerDateiname := 'd:\Artist\Album\Lied.mp3' reinspeichern (Ergebnis ist '..\Artist\Album\Lied.mp3').
Mit Hilfe von
Delphi-Quelltext
1: 2: 3: 4:
| ForceDirectories(ExtractFileDir(Basename)); SetCurrentDir(ExtractFileDir(Basename)); ExpandFilename(RelativerPfad)); |
bekommt man wieder den vollständigen Namen zurück. Soweit ok.
Folgendes Problem gibt es bei langen Dateinamen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| VollstaendigerDateiname := 'd:\01234567890123456789012345678901234567890123456789' + '01234567890123456789012345678901234567890123456789\' + '01234567890123456789012345678901234567890123456789' + '01234567890123456789012345678901234567890123456789\test.mp3'; Basename := 'd:\01234567890123456789\test.m3u';
Basename := 'd:\01234567890123456789012345678901234567890123456789\test.m3u'; |
Der ermittelte relative Dateiname ist in beiden Fällen korrekt (und ist in beiden Fällen derselbe), aber der umgekehrte Weg geht beim zweiten nicht mehr. Es gibt wohl Probleme, wenn die Summe der beide Längen größer als MAXPATH wird, aber das ist ja irgendwie sinnfrei, oder?
Ich verwende normal Delphi 7 Personal, wenn man das ganze mit den TNT-Varianten der Funktionen durchführt, gibt es dieselben Probleme, mit Delphi 2007 gibt es das Problem auch.
Jemand eine Idee, wie man das beheben oder umschiffen kann?
Edit: "Geht nicht" heißt hier einfach: Das Ergebnis ist leer und/oder enthält Datenmüll.
We are, we were and will not be.