可能重复:
Conversion between absolute and relative paths in Delphi
我正在尝试弄清楚如何根据原始网络链接获取文件路径。在我的应用程序中,我有两个值:
fRootDir:String = C:\Some Directory\My Web Site\
(应用程序目录)
fImgPath:String = ../Some Other Web Site/SomeImage.jpg
(来自网页)
结果必须是:C:\Some Directory\Some Other Web Site\SomeImage.jpg
注意图像路径前面的../
。这可能是../../../
中的多个,其中每个../
表示上传文件夹。图片SomeImage.jpg
实际上是C:\Some Directory\Some Other Web Site\
的位置。
另请注意,网络链接使用/
- 这不是转换为\
的问题。问题在于注意..
并实际查看上面的目录。
现在我需要将两个属性组合在一起,根据根路径和图像路径,在计算机上找到SomeImage.jpg
的最终路径。
答案 0 :(得分:3)
使用PathCanonicalize
SHLWAPI function非常容易。
只做
function SimplifyPath(const Path: string): string;
var
buf: array[0..MAX_PATH - 1] of char;
begin
if PathCanonicalize(buf, PChar(Path)) then
result := buf
else
RaiseLastOSError;
end;
答案 1 :(得分:3)
更简单:
const
RootFolder = 'D:\PerforceThuis\Marjan\Probeersels\StackOverflow';
RelativeFolder = '..\..\General\Plugins';
begin
WriteLn(ExpandFileName(IncludeTrailingBackSlash(RootFolder)+RelativeFolder));
在D6中测试过。输出:
D:\PerforceThuis\Marjan\General\Plugins