2012-05-05 18 views
5

ユーザは2つの別々のパス名を指定できる状況があり、1つのパス名がもう1つのパス名の内側にあるかどうかを確認する必要があります。両方のパス名がUNCか両方がドライブレターベースの場合、私はこれを行うことができますが、それらが混在している場合はどうなりますか?Delphi - UNCとドライブレター指定の2つのパス名の比較

"C:¥Program Files"などのパスを "\\ [このコンピュータ名] \ C \ Program Files"に "正規化"できますか? UNC形式のネットワークフォルダには対応するドライブ文字が割り当てられていない可能性があるので、明らかに別の方法はありません。

答えて

6

ExpandUNCFileNameの機能をご覧ください。

+0

+1また、[WNetGetUniversalName](http://msdn.microsoft.com/en-us/library/windows/desktop/aa385474%28v=vs.85%29.aspx)機能も役立ちます。 – RRUZ

+0

(@RRUZ、 'ExpandUNCFileName'は' WNetGetUniversalName'のラッパーではありませんか?その呼び出しで詳細を知ることができますか?)私は誤って 'ExpandUNCFilename'がすべてのケースでうまくいかないと思っていましたが、テストでは、 'ExpandUNCFileName'が' \\ 'で始まる名前をローカルドライブであるため返さない場合、テストではそれが表示されます。したがって、もし 'ExpandUNCFileName'のバージョンのいずれかがドライブレターで始まっていれば、一方のパスは他方のパスの内側にあることはできません。 – rossmcm

+0

はい 'ExpandUNCFileName'は 'WNetGetUniversalName'関数を呼び出しますが、' UNIVERSAL_NAME_INFO_LEVEL'フラグを指定すると、この関数を 'REMOTE_NAME_INFO_LEVEL'値と共に使うことができます。したがって、NetGetUniversalName関数を直接使用して、より完全なソリューションを構築することができます。 – RRUZ