2011-12-10 83 views
0

可能重複:
Conversion between absolute and relative paths in Delphi根據root + web鏈接確定文件/文件夾路徑?

我試圖找出如何讓基於原始網頁鏈接的文件路徑。在我的應用程序,我有兩個值:

fRootDir:字符串= C:\Some Directory\My Web Site\(應用程序目錄)

fImgPath:字符串= ../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

@Serg其實感謝指出了這一點,我找到更好的答案有,但這裏的人都還是不錯的,因爲他們是短期和簡單的:d –

回答

3

更簡單:

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

經測試,在D6。輸出:

D:\PerforceThuis\Marjan\General\Plugins 
+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; 
+0

我不明白 - 只有一個參數?我有兩個不同的字符串傳入此函數:根路徑(C:\ SomeFolder \)和相對路徑(../SomeOtherFolder/SomeFile.abc) - 兩者需要組合。我不明白這個功能如何實現這一點。 –

+0

'SimplifyPath(ROOTPATH + RelativePath)' –

+0

唉唉確定這是有道理的,然後... –