2013-07-04 213 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

我發現我開始檢查存在目錄的方式。然後,我用ContainsListDirecotyDetails

這裏是我的功能:

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; 
     }