絶対パスかどうか判断するにはどのようにしたらよいのでしょうか?
VB.NETならばSystem.IO.Path.IsPathRootedが使用できるのですが、VB6.0の場合はどのように判断するのでしょうか?
チェックするパス内にコロン(:)があるはどうかで判断するのではまずいでしょうか?
> 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」らしいです。
IsPathRootedでやってることと同様の判断でチェックするようにします。
ありがとうございました。
FileSystemObjectでなら、
fso.GetAbsolutePathName(元ファイル名)が返す値と元ファイル名を比較して、
同じだったら絶対パスです という判断が可能かなと思いますが、いかがでしょう?
> fso.GetAbsolutePathName
その方法だと、"C:\Program Files\..\Program Files\Microsoft Office" のようなパスが、相対パスとして扱われてしまうような気がする……。
途中に ".\" や "..\" があっても、パス文字列自体がルートから開始されていれば絶対パス、そうでなければ相対パスだと思っていたのだけれど、違うのかな?
"\file.txt" のような表記だと、カレントディレクトリには依存しないけど、カレントドライブには依存するので、これは「相対パス」じゃないのかなぁ。
GetAbsolutePathName メソッドの解説ページでは、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsmthgetabsolutepathname.asp
>指定されたパスの絶対パス名を返します。
とか、
>格納されているドライブのルートからの一意的な名前になっていると、パスは絶対パスになります。
とあります。
間に..\が入ったパス表記は一意的でないということでしょうかね。
"\file.txt" のような表記は、
ドライブのルートからの一意的な名前ではない=相対パス という解釈すると、
何か問題ありますかね?
.NETでは、何か違う解釈が存在するのでしょうか?
> .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。
として説明されていますね。
なるほど...
自分の使用する範囲で差し支えなければ、
どちらでも良いでしょうけど、
一貫性という意味ではちょっとアレですね。
ツイート | ![]() |