2011-12-10 8 views
0

可能性の重複:
Conversion between absolute and relative paths in Delphiルート+ウェブリンクに基づいてファイル/フォルダのパスを特定しますか?

私は、元のWebリンクに基づいてファイルパスを取得する方法を把握しようとしています。私のアプリケーションでは、私は2つの値が設定されています

fRootDir:文字列= C:\Some Directory\My Web Site\(アプリケーションディレクトリ)

fImgPath:文字列= ../Some Other Web Site/SomeImage.jpg(からWebページ)

結果はする必要があります:C:\Some Directory\Some Other Web Site\SomeImage.jpg

画像パスの前に../があることに注意してください。これは、../../../のように連続して多数ある可能性があります。それぞれ../は、を意味します。。画像SomeImage.jpgは実際にはC:\Some Directory\Some Other Web Site\にあります。

ウェブリンクでは/を使用しています。これは\に変換する際に問題ありません。問題は、..に気づいて、実際に上記のディレクトリをそれぞれ探していることです。

ここでは、2つのプロパティを組み合わせて、ルートとイメージパスに基づいて、コンピュータ上で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

これはうまくいくようですが、私はDelphiの前でそれを試してみる必要があります - ありがとう! –

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

は、私は理解していない - だけで1つのパラメータがあります?この関数には、ルートパス(C:\ SomeFolder \)と相対パス(../SomeOtherFolder/SomeFile.abc)の2つの異なる文字列があります。私はこの機能がどのようにこれを達成できるかはわかりません。 –

+0

'SimplifyPath(RootPath + RelativePath)' –

+0

ああ、意味があります... –

関連する問題