絶対パスかどうか判断する

解決


ABC  2006-01-10 22:22:52  No: 93489

絶対パスかどうか判断するにはどのようにしたらよいのでしょうか?
VB.NETならばSystem.IO.Path.IsPathRootedが使用できるのですが、VB6.0の場合はどのように判断するのでしょうか?
チェックするパス内にコロン(:)があるはどうかで判断するのではまずいでしょうか?


魔界の仮面弁士  2006-01-10 22:46:16  No: 93490

> VB6.0の場合はどのように判断するのでしょうか?
対応する命令は無いので、自前で文字列解析が必要かも。

> チェックするパス内にコロン(:)があるはどうかで判断するのではまずいでしょうか?
まずいでしょう。

たとえば、"\\server\shared\folder\file.txt" や "\file.txt" のように、
コロンが無くても絶対パスとなる物もあれば、逆に、
コロンがあっても相対パスとなる場合もありえます。
http://mag.autumn.org/Content.modf?id=20051017152735

ちなみに、.NET 1.x の System.IO.Path.IsPathRooted の場合は、
「1 文字目が "\" または 2 文字目が ":" ならば True、その他は False」らしいです。


ABC  2006-01-10 22:50:03  No: 93491

IsPathRootedでやってることと同様の判断でチェックするようにします。
ありがとうございました。


もげ  2006-01-11 00:06:44  No: 93492

FileSystemObjectでなら、
fso.GetAbsolutePathName(元ファイル名)が返す値と元ファイル名を比較して、
同じだったら絶対パスです  という判断が可能かなと思いますが、いかがでしょう?


Dental  2006-01-11 00:46:14  No: 93493

> fso.GetAbsolutePathName
その方法だと、"C:\Program Files\..\Program Files\Microsoft Office" のようなパスが、相対パスとして扱われてしまうような気がする……。

途中に ".\" や "..\" があっても、パス文字列自体がルートから開始されていれば絶対パス、そうでなければ相対パスだと思っていたのだけれど、違うのかな?

"\file.txt" のような表記だと、カレントディレクトリには依存しないけど、カレントドライブには依存するので、これは「相対パス」じゃないのかなぁ。


もげ  2006-01-11 01:50:32  No: 93494

GetAbsolutePathName メソッドの解説ページでは、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsmthgetabsolutepathname.asp

>指定されたパスの絶対パス名を返します。
とか、

>格納されているドライブのルートからの一意的な名前になっていると、パスは絶対パスになります。

とあります。
間に..\が入ったパス表記は一意的でないということでしょうかね。

"\file.txt" のような表記は、
ドライブのルートからの一意的な名前ではない=相対パス  という解釈すると、
何か問題ありますかね?
.NETでは、何か違う解釈が存在するのでしょうか?


魔界の仮面弁士  2006-01-11 03:03:28  No: 93495

> .NETでは、何か違う解釈が存在するのでしょうか?

"C:file.txt" や "\file.txt" は、相対パスですよね。

しかし、.NET の System.IO.Path.IsPathRooted() では、
  Path.IsPathRooted("C:file.txt") → True
  Path.IsPathRooted("\file.txt") → True
として解釈します。

なお、SDK 上の表記では、IsPathRooted は
》指定したパス文字列に絶対パス情報または相対パスの情報が
》含まれているかを示す値を取得します。

》path に絶対パスが含まれている場合は true。それ以外の場合は false。 
として説明されていますね。


もげ  2006-01-11 23:38:23  No: 93496

なるほど...
自分の使用する範囲で差し支えなければ、
どちらでも良いでしょうけど、
一貫性という意味ではちょっとアレですね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加