DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ネットワークドライブの絶対パスを取得するには?

環境/言語:[VB.NET]
分類:[.NET]

掲題のとおりなのですがネットワークドライブの絶対パスを取得するにはどうしたらよいでしょうか?ドライブリストでドライブを選択するときにネットワークドライブを選択するとエラーになってしまいます。ドライブリストを使ってネットワークドライブを選択したときのハンドリング方法のノウハウがある方がいらっしゃいましたらアドバイス頂きたく思います。
こんにちは、じゃんぬねっと です。

■No8196に返信(うどさんの記事)
> ネットワークドライブの絶対パスを取得するにはどうしたらよいでしょうか?

.NET Framework にはそういうメソッドはないのかなぁ...
Google で、小1時間調べてみたんですが見当たりませんでした...。

だとすると、Win32API の WNetGetConnection() 関数を使うか、
レジストリを見に行くしかないと思います。

'/ WNetGetConnection の 宣言
Private Declare Function WNetGetConnection Lib "MPR.DLL" Alias "WNetGetConnectionA" ( _
    ByVal lpszLocalName  As String, _
    ByVal lpszRemoteName As String, _
    ByRef cbRemoteName   As Integer _
) As Integer

'/ ネットワークドライブのリモートパスを取得するメソッド
Private Shared Function GetRemotePath(ByVal nDriveLetter As String) As String
    Dim nRemotePath As String = New String(ControlChars.NullChar, 1024)

    Call WNetGetConnection(nDriveLetter, nRemotePath, 1024)

    Return nRemotePath.Substring(0, nRemotePath.IndexOf(ControlChars.NullChar))
End Function

'/ Button1 を押下した時に「M:」のリモートパスを表示
Private Sub Button1_Click(中略) Handles Button1.Click
    Dim nRemotePath As String

    nRemotePath = GetRemotePath("M:")

    MessageBox.Show(nRemotePath)
End Sub
お返事が遅くなりました。
アドバイス頂いたとおりやってみたら、ネットワークドライブのパスが取得できました。ありがとうございました。
ドライブリストでドライブを選択するときにネットワークドライブを選択するとエラーになってたので、ネットワークドライブ選択時に直接取得したパスを当てて回避しようと考えていました。
ところが・・、現在自宅にの環境で同様のテストを行ったところ、問題なくドライブリストでネットワークドライブが選択できました。
環境で違うんでしょうかね??もう少し調べてみようと思います。

DOBON.NET | プログラミング道 | プログラミング掲示板