C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 指定されたパスがネットワークかローカルかを調べたい


(過去ログ 98 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■58264 / inTopicNo.1)  指定されたパスがネットワークかローカルかを調べたい
  
□投稿者/ よもぎ猫 (3回)-(2011/03/30(Wed) 11:28:03)

分類:[VB.NET/VB2005 以降] 

VB 2008 Expressを使用しています。

例えば、"C:\aaa\bbb"のようなパスについて、これがローカルパスかネットワークパスかを調べるには
どうすればよいでしょうか?
例えば、仮にC:\がネットワークドライブの場合はネットワークパスであると判断したいです。
また、パスが"\\サーバー名"で始まれば、もちろんネットワークパスであると判断します。
なお、リムーバブルディスクの判断についてですが、これはローカルとみなして問題ありません。
引用返信 編集キー/
■58265 / inTopicNo.2)  Re[1]: 指定されたパスがネットワークかローカルかを調べたい
□投稿者/ shu (578回)-(2011/03/30(Wed) 11:41:27)
No58264 (よもぎ猫 さん) に返信

少し前の投稿内容でドライブがハードディスクかチェックする方法が
記載されていてその方法でネットワークドライブかチェック出来ますので
参考にしてみて下さい。
引用返信 編集キー/
■58328 / inTopicNo.3)  Re[2]: 指定されたパスがネットワークかローカルかを調べたい
□投稿者/ よもぎ猫 (4回)-(2011/03/31(Thu) 09:21:14)
No58265 (shu さん) に返信

>少し前の投稿内容でドライブがハードディスクかチェックする方法が
>記載されていてその方法でネットワークドライブかチェック出来ますので
>参考にしてみて下さい。

ありがとうございます。
それでは、それを参考に、以下の方法を考えましたが、懸念すべき点はありますでしょうか?

1)System.IO.Path.GetPathRoot(調べたいパス)でルートパスを調べる
2)System.IO.DriveInfo.GetDrives()ですべての論理ドライブのDriveInfoを取得する
3)上記1)で取得したルートパスに一致するドライブが2)の中にあれば、DriveTypeを調べ、
 DriveType.Networkであればネットワークのパスと判断する。
 (今回はネットワークのパスかどうかの反だけでいいです)
4)上記1)で取得したルートパスが2)の中に見つからない場合は、ネットワークのパスと
 判断する。

特に、3)の部分では、Path.GetPathRootで返す値やDriveInfo.GetDrives()で取得したDriveInfoの
Nameプロパティが"C:\"のような"\"付きの文字列が返ってくることを前提に行っていますが、
この認識は正しいでしょうか?
また、4)の判定は、"\\サーバ名"で始まるパスの場合は、DriveInfo.GetDrives()で取得されるドライブ名と
ルートパスは一致しないので、ネットワークのパスと判定してもよいと考えました。

宜しくお願いします。
引用返信 編集キー/
■58330 / inTopicNo.4)  Re[3]: 指定されたパスがネットワークかローカルかを調べたい
□投稿者/ shu (589回)-(2011/03/31(Thu) 09:30:06)
No58328 (よもぎ猫 さん) に返信

> 1)System.IO.Path.GetPathRoot(調べたいパス)でルートパスを調べる
> 2)System.IO.DriveInfo.GetDrives()ですべての論理ドライブのDriveInfoを取得する
GetPathRootから得た最初の文字がa-zのときにDriveInfoのコンストラクタnew DriveInfo(DriveName as String)
で取得するといいかと思います。


> 3)上記1)で取得したルートパスに一致するドライブが2)の中にあれば、DriveTypeを調べ、
>  DriveType.Networkであればネットワークのパスと判断する。
>  (今回はネットワークのパスかどうかの反だけでいいです)
> 4)上記1)で取得したルートパスが2)の中に見つからない場合は、ネットワークのパスと
>  判断する。
>
> 特に、3)の部分では、Path.GetPathRootで返す値やDriveInfo.GetDrives()で取得したDriveInfoの
> Nameプロパティが"C:\"のような"\"付きの文字列が返ってくることを前提に行っていますが、
> この認識は正しいでしょうか?
DriveInfoのNameはa-zの1文字だけに対応しています。


> また、4)の判定は、"\\サーバ名"で始まるパスの場合は、DriveInfo.GetDrives()で取得されるドライブ名と
> ルートパスは一致しないので、ネットワークのパスと判定してもよいと考えました。
この考えは良いと思います。
引用返信 編集キー/
■58334 / inTopicNo.5)  Re[1]: 指定されたパスがネットワークかローカルかを調べたい
□投稿者/ 渋木宏明 (70回)-(2011/03/31(Thu) 10:10:10)
渋木宏明 さんの Web サイト
どれくらいの制度が必要なんでしょうか?

ドライブ文字だけに注目していると、リパースポイントとか、いくつか対応できないブツがあるような気がします。

あと、自機が公開している共有フォルダをネットワークドライブに割り当てた場合はどう扱うべきでしょう?
引用返信 編集キー/
■58337 / inTopicNo.6)  Re[1]: 指定されたパスがネットワークかローカルかを調べたい
□投稿者/ 魔界の仮面弁士 (2147回)-(2011/03/31(Thu) 10:36:44)
No58264 (よもぎ猫 さん) に返信
> 例えば、"C:\aaa\bbb"のようなパスについて、これが
> ローカルパスかネットワークパスかを調べるにはどうすればよいでしょうか?

指定したいパスの形式によって変わってくるかと思います。

"C:\aaa\bbb" のような形式だけであれば、My.Computer.FileSystem.GetDriveInfo や
System.IO.DriveInfo から DriveType を得ることで判定できますが、
それ以外の形式のパス指定も行われるのでしょうか?

たとえば下記はいずれも、当方環境ではローカルの C:\InetPub\wwwroot\ に
相当するフォルダーが開かれる事になります。このようなパスも許容されますか?

Dim path1 As String = String.Format("\\{0}\C$\InetPub\wwwroot\", My.Computer.Name)
Dim path2 As String = String.Format("\\?\UNC\{0}\C$\InetPub\wwwroot\", My.Computer.Name)
Dim path3 As String = "\\?\C:\InetPub\wwwroot\"
Dim path4 As String = "file:///C|/InetPub/wwwroot"

Process.Start(path1)
Process.Start(path2)
Process.Start(path3)
Process.Start(path4)
引用返信 編集キー/
■58340 / inTopicNo.7)  Re[2]: 指定されたパスがネットワークかローカルかを調べたい
□投稿者/ よもぎ猫 (5回)-(2011/03/31(Thu) 10:59:30)
皆さん、書き込みありがとうございます。
基本的に、リムーバブルを含むローカルのパスは"C:\aaa\bbb"形式です。
また、ネットワークのパスは"\\サーバ名\bbb"と"C:\aaa\bbb"形式が混在します。
理想としては、対象のファイルが物理的に自PC上にあるかないかの判断を行いたいのですが、
それが困難であれば、自PC上にあるかどうか不明な場合は自PCにはないと判断するということでもいいです。

宜しくお願いします。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -