VisualBasic2005Proで勉強中の者です。ネットワークフォルダ"\\Server\Folder1\"が存在するかどうかを調べるには、どのようなコードを記述すればよいでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/09/05 16:39:28
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:KirakiraHikaru No.2

回答回数354ベストアンサー獲得回数68

ポイント100pt

"\\Server\Folder1\"

の形でアクセスする場合、Windowsのログオンユーザに依存します。

エクスプローラ等の場合は、ログオンユーザでアクセスできなかった場合は、

ユーザ・パスワードを入力するダイアログが表示されます。

・ログオンユーザが共有ディレクトリのユーザとして許可されている。

・ログオンユーザ+パスワードがアクセス先のユーザと同じである。

・エクスプローラ等でアクセス先の認証が完了している。

以上の条件のいずれかが満たされている場合に、\\~でアクセスできます。

ですので、Windowsによる認証ができていない状態だと、

先の回答のコードではディレクトリを認識できません。


解決策としては、

アクセス先の共有ディレクトリの許可するユーザにログオンユーザを登録する。

もしくは、

ネットワークドライブに共有ディレクトリを指定して、

O:\で"\\Server\Folder1\"にアクセスできるように設定しておく。

のが簡単だと思います。


あまりオススメできないのですが、

下記のコードで一応、ユーザ・パスを指定して共有ディレクトリにアクセスできます。

VBScriptでWMIをいじっていたときのコードを流用しているので、

あまり信頼性がありません。

(O:は使用されていないドライブ名とする)

        Dim WshNetwork As Object = CreateObject("WScript.Network")

        Try
            WshNetwork.MapNetworkDrive("O:", "\\Server\Folder1\", , "User", "Password")
        Catch ex As Exception
            MessageBox.Show("接続エラー")
            Return
        End Try
        '指定フォルダ存在チェック
        If System.IO.Directory.Exists("O:\") Then
            MessageBox.Show("存在します。")
        Else
            MessageBox.Show("存在しません。")
        End If

        Try
            WshNetwork.RemoveNetworkDrive("O:")
        Catch ex As Exception
            MessageBox.Show("切断エラー")
            Return
        End Try


私も知識不足なので、もしかしたら、

.NET FrameworkやWin32APIで上記と同等のことが

できるかもしれないです。

id:crashtruck

ありがとうございます。申し上げにくいのですが、何と、フォルダ名を間違って記述しておりました…。どうぞ今後とも阿呆にお付き合いください。

2006/09/05 16:38:54

その他の回答1件)

id:KirakiraHikaru No.1

回答回数354ベストアンサー獲得回数68

ポイント100pt

下記のコードで指定フォルダが存在するかチェックできます。

ネットワークフォルダの場合、多少時間がかかります。

        Dim dirName As String
        dirName = "\\Server\Folder1\"

        '指定フォルダ存在チェック
        If System.IO.Directory.Exists(dirName) Then
            MessageBox.Show(dirName & "は存在します。")
        Else
            MessageBox.Show(dirName & "は存在しません。")
        End If
id:crashtruck

ありがとうございます。しかし、何度トライしても存在しないという結果になってしまいます。「マイ ネットワーク」には表示されているのですが…。

2006/09/05 00:55:03
id:KirakiraHikaru No.2

回答回数354ベストアンサー獲得回数68ここでベストアンサー

ポイント100pt

"\\Server\Folder1\"

の形でアクセスする場合、Windowsのログオンユーザに依存します。

エクスプローラ等の場合は、ログオンユーザでアクセスできなかった場合は、

ユーザ・パスワードを入力するダイアログが表示されます。

・ログオンユーザが共有ディレクトリのユーザとして許可されている。

・ログオンユーザ+パスワードがアクセス先のユーザと同じである。

・エクスプローラ等でアクセス先の認証が完了している。

以上の条件のいずれかが満たされている場合に、\\~でアクセスできます。

ですので、Windowsによる認証ができていない状態だと、

先の回答のコードではディレクトリを認識できません。


解決策としては、

アクセス先の共有ディレクトリの許可するユーザにログオンユーザを登録する。

もしくは、

ネットワークドライブに共有ディレクトリを指定して、

O:\で"\\Server\Folder1\"にアクセスできるように設定しておく。

のが簡単だと思います。


あまりオススメできないのですが、

下記のコードで一応、ユーザ・パスを指定して共有ディレクトリにアクセスできます。

VBScriptでWMIをいじっていたときのコードを流用しているので、

あまり信頼性がありません。

(O:は使用されていないドライブ名とする)

        Dim WshNetwork As Object = CreateObject("WScript.Network")

        Try
            WshNetwork.MapNetworkDrive("O:", "\\Server\Folder1\", , "User", "Password")
        Catch ex As Exception
            MessageBox.Show("接続エラー")
            Return
        End Try
        '指定フォルダ存在チェック
        If System.IO.Directory.Exists("O:\") Then
            MessageBox.Show("存在します。")
        Else
            MessageBox.Show("存在しません。")
        End If

        Try
            WshNetwork.RemoveNetworkDrive("O:")
        Catch ex As Exception
            MessageBox.Show("切断エラー")
            Return
        End Try


私も知識不足なので、もしかしたら、

.NET FrameworkやWin32APIで上記と同等のことが

できるかもしれないです。

id:crashtruck

ありがとうございます。申し上げにくいのですが、何と、フォルダ名を間違って記述しておりました…。どうぞ今後とも阿呆にお付き合いください。

2006/09/05 16:38:54
  • id:KirakiraHikaru
    >フォルダ名を間違って記述
    そうでしたかー、原因がわかってよかったです。
    Exploreで\\~+user/passのような記述がなかったかなー
    と思っていたのですが、結局思い出せず。
    とにかく上手く動いてなによりです。
    またイルカくん貰えてうれしいです!!
    (ポイントもおまけして頂いて励みになります)
  • id:crashtruck
    プロの方(ですよね?)に解決策を提示していただけるということを考えると安いものです。またお願いいたします。
  • id:KirakiraHikaru
    今は自分でプログラミングをすることは少ないので、
    プロとは言えないレベルになってますが、
    VBは趣味で続けてます。
    答えられる内容であれば回答致します。 (*'u'*)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません