FTP の規格 (RFC959) 自体にはそのようなチェック機能はありませんので、実際にそのディレクトリをアクセスしてみてサーバ側の反応を見ることで対応することになります。
なお FTP プロトコル上のエラーとしてサーバから返されるエラーは、IPWorksFtpException でエラーコード 141 として検出されます。このコードではディレクトリ不在エラー以外のものも検出しますので、サーバ側から返されるメッセージもチェックして判断する必要があります。
以下にサンプルコードを示します。このコードでは、RemotePath に当該ディレクトリを設定して (内部的に) CWD コマンドを発行させます。またディレクトリ /abc/xyz が存在しない場合には、サーバ側からは
550 CWD failed. "/abc/xyz": directory not found
というエラーメッセージが返されると仮定しています。
    try
    {
       // 確認したいパスを RemotePath に設定
       ftp.RemotePath = "/abc/xyz";
    }
    catch (IPWorksFtpException ipwe)
    {
      // パスが存在しない場合は FTP Protocol Error を返す。
       // FTP Protocol Error は全てエラーコード 141 にされるので、実際のメッセージを確認して
       // 判断する。
       if ( ipwe.Code == 141 )
      {
        // サーバから返されたエラーメッセージをチェック
         if ( ipwe.Message.Contains("directory not found") )
        {
          System.Console.WriteLine("*** directory /abc/xyz doesn't exit. ***");
        }
      }
    }このロジックはサーバの返すメッセージに依存していますので、実際にご利用いただく際には検出ロジックを実際のサーバに合わせて調整する必要があります。なお、サーバが仕様上「ディレクトリが存在しない場合」と「存在するけれどアクセス権が無い場合」のエラーメッセージをサーバが区別しない場合はクライアント側で両者を区別することはできません。
0 件のコメント:
コメントを投稿