【问题标题】:Determine file/folder path based on root + web link? [duplicate]根据根+网络链接确定文件/文件夹路径? [复制]
【发布时间】:2011-12-10 15:41:50
【问题描述】:

可能重复:
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 的最终路径。

【问题讨论】:

  • @Serg 实际上感谢您指出这一点,我在那里找到了更好的答案,但这里的答案仍然很好,因为它们简短而简单:D

标签: string delphi path delphi-7


【解决方案1】:

更简单:

const
  RootFolder = 'D:\PerforceThuis\Marjan\Probeersels\StackOverflow';
  RelativeFolder = '..\..\General\Plugins';
begin
  WriteLn(ExpandFileName(IncludeTrailingBackSlash(RootFolder)+RelativeFolder));

在 D6 中测试。输出:

D:\PerforceThuis\Marjan\General\Plugins

【讨论】:

  • 看起来这可以工作,但我必须走到我的 Delphi 前面才能尝试 - 谢谢!
【解决方案2】:

这很容易使用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;

【讨论】:

  • 我不明白 - 只有一个参数?我有两个不同的字符串要传递给这个函数:根路径 (C:\SomeFolder) 和相对路径 (../SomeOtherFolder/SomeFile.abc) - 两者需要结合起来。我不明白这个函数是如何做到这一点的。
  • SimplifyPath(RootPath + RelativePath)
  • 啊,好吧,那是有道理的......
猜你喜欢
  • 2021-06-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 2022-01-04
  • 2019-03-30
  • 1970-01-01
相关资源
最近更新 更多