- PR -

仮想パスか物理パスかを区別する

1
投稿者投稿内容
ani
常連さん
会議室デビュー日: 2007/05/17
投稿数: 44
投稿日時: 2007-10-02 20:31
こんにちは。
いつもお世話になっております。

取得したパスが仮想パスであるか物理パスであるかを区別したいのですが、よいメソッドはないでしょうか?
具体的には、取得したパスをHttpRequest.MapPathメソッドに渡して物理パスに変換しているのですが、
物理パスを渡した場合に例外が発生します。
(取得するパスは仮想パスであったり、物理パスであったりします。)

よろしくお願いします。

<環境>
Windows XP(SP2), Visual Studio 2005, .Net Framework 2.0
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-10-03 20:45

仮想パスだとか物理パスという話だけではいったい何の話やらわかりませんが、
ASP.NetとかHTTPとかURLの話ですよね?

仮想パスはURLの一部のことで、
物理パスはローカルファイルシステム上のパスのことだとすると。

パスが相対パスで、物理パスでもパス区切りに「/」を使っているなら、
区別する方法はありません。

なぜなら、物理パスと仮想パスが同じであっても、
違うものを指定することが可能だからです。
例えば、「./mofumofu.txt」だけから、
それが仮想パスか物理パスか区別するのは不可能ですよね?

Windowsのファイルシステムでは普通区切り文字に「\」を使うので、
その文字列が存在するかどうかで区別したり、
絶対パスであることがわかっているなら
ドライブ文字区切りの「:」で判断したりはできると思います。

そもそも、ローカルファイルシステム上のパスは
セキュリティの問題があるので公開しないのが原則で、
URLはその用途上、公開されるのが原則です。
ですので、普通の用途では二つが混ざって区別が付かない状態になりません。

たまにありますが、
上記のようにドライブ文字区切りで判断したり、
>物理パスを渡した場合に例外が発生します。
この例外で判断すればいいと思います。
ani
常連さん
会議室デビュー日: 2007/05/17
投稿数: 44
投稿日時: 2007-10-04 09:12
れいさん、レスありがとうございます。

引用:

れいさんの書き込み (2007-10-03 20:45) より:

仮想パスだとか物理パスという話だけではいったい何の話やらわかりませんが、
ASP.NetとかHTTPとかURLの話ですよね?

仮想パスはURLの一部のことで、
物理パスはローカルファイルシステム上のパスのことだとすると。

パスが相対パスで、物理パスでもパス区切りに「/」を使っているなら、
区別する方法はありません。

なぜなら、物理パスと仮想パスが同じであっても、
違うものを指定することが可能だからです。
例えば、「./mofumofu.txt」だけから、
それが仮想パスか物理パスか区別するのは不可能ですよね?

Windowsのファイルシステムでは普通区切り文字に「」を使うので、
その文字列が存在するかどうかで区別したり、
絶対パスであることがわかっているなら
ドライブ文字区切りの「:」で判断したりはできると思います。

そもそも、ローカルファイルシステム上のパスは
セキュリティの問題があるので公開しないのが原則で、
URLはその用途上、公開されるのが原則です。
ですので、普通の用途では二つが混ざって区別が付かない状態になりません。

たまにありますが、
上記のようにドライブ文字区切りで判断したり、
>物理パスを渡した場合に例外が発生します。
この例外で判断すればいいと思います。



そうです。ASP.NetとかHTTPとかURLの話です。

確かに「./mofumofu.txt」だけからそれが仮想パスか物理パスか区別するのは不可能ですね。
よく考えれば想像がつくことでした。
お恥ずかしいです。

仮想パスか物理パスかは例外を捕捉して判断したいと思います。
分かりやすい説明、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)