2013-07-04 3 views
0

Я использую FtpWebRequest, чтобы сделать каталог Теперь, и я получаю это исключение, как ftp error 550: File unavailable. Хотя иногда я могу сделать каталог успешно, я всегда получал это исключение.C# ftp Ошибка 550

И Ниже моя CheckDir функция:

protected string CheckDir(string fullpath, string ip, string acc, string pwd) 
{ 
    string[] path = fullpath.Split(slash[1]); 

    bool result = false; 

    FtpWebRequest request = (FtpWebRequest)(WebRequest.Create(ip + path[2])); 
    request.Credentials = new NetworkCredential(acc, pwd); 
    request.Method = WebRequestMethods.Ftp.GetDateTimestamp; 
    request.Timeout = 10000; 

    try 
    { 
     using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) 
     { 
      result = true; 
     } 
    } 
    catch (WebException ex) 
    { 
     FtpWebResponse response = (FtpWebResponse)ex.Response; 

     if (response != null && response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable) 
     { 
      request = (FtpWebRequest)WebRequest.Create(ip + path[2]); 
      request.Credentials = new NetworkCredential(acc, pwd); 
      request.Method = WebRequestMethods.Ftp.MakeDirectory; 
      request.UsePassive = true; 
      request.UseBinary = true; 
      request.KeepAlive = false; 
      request.GetResponse(); 
      result = true; 
     } 
     else 
     { 
      result = false; 
     } 
    } 

    if (result == true) 
     return path[2]; 
    else 
     return null; 
} 

ответ

0

я обнаружил, что я получил способ проверить существовавший Directory. Затем я использую Contains с ListDirecotyDetails.

Вот моя функция:

protected string CheckDir(string fullpath, string c_ip, string c_acc, string c_pwd) 
     { 
      string[] path = fullpath.Split(slash[1]); 

      bool result = false; 

      try 
      { 
       if (WebRequestMethods.Ftp.ListDirectoryDetails.Contains(c_ip + path[2])) 
       { 
        result = true; 
       } 
       else 
       { 
        FtpWebRequest request = (FtpWebRequest)(WebRequest.Create(c_ip + path[2])); 
        request.Credentials = new NetworkCredential(c_acc, c_pwd); 
        request.Method = WebRequestMethods.Ftp.MakeDirectory; 
        request.KeepAlive = false; 
        try 
        { 
         FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
         response.Close(); 
        } 
        catch (Exception) 
        { 
         request.Abort(); 
         result = false; 
        } 
        request.Abort(); 
        result = true; 
       } 
      } 
      catch (Exception ex) 
      { 
       System.Windows.Forms.MessageBox.Show(ex.Message); 
      } 

      if (result == true) 
       return path[2]; 
      else 
       return null; 
     }