- PR -

フォルダのフルパスやファイル名の比較方法 VB.NET

投稿者投稿内容
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-10-28 11:51
引用:

ファイル名を入力したら、オープンせずともファイルのハンドル(?)やIDのようなものを返してくれる API があって、そのハンドルが同一かどうかでファイルの同一性を判断できる、というような API です。



やはり難しいでしょうね。

ローカルのファイルシステム限定であれば可能かもしれませんが、既に例示されているように、ネットワーク上の資源を視野に入れた時点で限りなく不可能に近くなると思います。

ネットワーク資源を公開しているシステムが、必ずしも各ファイル/フォルダの「完全な識別子」を持っている保証はありません。

また、仮にネットワーク資源を公開するシステムが「完全な識別子」を持っているとしても、ファイル共有に使用されるプロトコルがそれを伝達するような仕様になっていなければ、やはり成立しません。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2007-10-28 13:25
引用:
既に挙げているように、「単純な文字列としての比較」だけではネットワークドライブやりパースポイントなどへの対応が十分ではありません。



Network drive や junction のほかにも "." や ".." の対応も必要ですね。
ついでに path 区切り "\" は連続してもひとつの区切り記号として扱われますし。
"D:\\hoge.txt" は OK

それから、"\\?\", "\\?\UNC\" のような形式も。
もっとも、.NET では上記ははじかれますが。

Windows の path について

_________________
ちゃっぴ@わんくま同盟
ちゃっぴの監禁部屋

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2007-10-28 13:26 ]
リットン
会議室デビュー日: 2007/10/27
投稿数: 6
投稿日時: 2007-10-28 13:50
重ね重ねのご教授ありがとうございます。

引用:

Path.GetFullPath() と String.ToUpper() で前処理した文字列として比較しています。



やはりFSOは使われないのですね。
ジャンクションポイントやリバースポイントはわかりませんが
そこまで厳密には考えていませんので、
上記の方法で関数を作ろうと思います。ありがとうございました。


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