2

光沢のあるサーバーに共有があるとします。

\\server1\MyShare

これを実行すると:

Directory.Exists("\\server1\MyShare") //Returns True

ここで、サーバーからケーブルを引っ張り出し、コードを再度実行します。

Directory.Exists("\\server1\MyShare") //Returns False

false を返すかどうかを知りたいのは....:

  • サーバーに到達できませんでした
  • サーバーは応答しましたが、ディレクトリが存在しませんでした

これを達成する最も簡単な方法は何ですか?

4

6 に答える 6

2

私は同様の問題を抱えていましたが、\\Server\Share\Directory私が求めていたディレクトリは余分なレイヤーだったので( )、簡単な方法でカンニングできました。

if( Directory.Exists("\\Server\Share") && !Directory.Exists("\\Server\Share\Directory") )
//Server is up, directory doesn't exist
..etc..

潜在的なタイミング/競合状態がありますが、まだ問題は発生していません。

于 2012-07-03T13:13:23.793 に答える
2

サーバーに ping を実行します: http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspx

ブロックの例:

Ping ping = new Ping();
PingResponse response = ping.PingHost(@"\\server1", 4);
于 2012-07-03T12:40:27.690 に答える
2

サーバーにpingできるかどうかを確認します

ネットピン

于 2012-07-03T12:39:51.550 に答える
1

これらの回答は、質問の a) の部分に役立ちます - リモート サーバーが応答しているかどうかを確認するにはどうすればよいですか: C# リモート サーバーを確認する

パート b) については、あなたのDirectory.Exists方法が最善の方法です - ただし、WMI を使用してフォルダを確認することを検討することをお勧めしますが、これは既に持っているものを使用するよりもはるかに遅くて面倒です..

于 2012-07-03T13:20:44.657 に答える
1

ping は少しぎこちなく、ネットワークの設定方法によっては、ping が許可されなかったり、別のデバイスが ping に応答したりする場合があります。

このコードは、アクセスしようとしているフォルダーの状態に応じて、3 つのメッセージのいずれかをコンソールに書き込みます。

       try
        {
            DirectoryInfo diNoServer = new DirectoryInfo(@"\\non.existant.server\share");
            diNoServer.Attributes = diNoServer.Attributes;
            if (!diNoServer.Exists)
            {
                Console.WriteLine("The server was responsive, but the directory did not exist");
            }
            else
            {
                Console.WriteLine("all good");
            }
        }
        catch (IOException exception)
        {
            Console.WriteLine("The server was unreachable");
        }
于 2012-07-03T13:21:34.387 に答える