2012-03-10 69 views
1

我正在使用Make目錄創建一個文件夾和子文件夾在我的FTP(使用filezilla)工作正常,但是當我嘗試在我的測試服務器(IIS FTP)工作,拋出550,文件沒有找到或沒有access.so只是一個快速的方式來改變代碼,以創建我的ftp服務器的子目錄工作正常,但我知道它是一種有點低劣的方式做到這一點。效率低下的方式來創建FTP子文件夾

改變基於@Markus

 var dir = new ConsoleApplication5.Program(); 
     string path = "ftp://1.1.1.1/testsvr01/times/" + "testfile" + "/svr01fileName"; 
     string[] pathsplit = path.ToString().Split('/'); 
     string Firstpath = pathsplit[0] + "/" + pathsplit[1] + "/" + pathsplit[2] + "/" + pathsplit[3] + "/"; 
     string SecondPath = Firstpath + "/" + pathsplit[4] + "/"; 
     string ThirdPath = SecondPath + "/" + pathsplit[5] + "/"; 
     string[] paths = { Firstpath, SecondPath, ThirdPath }; 
     foreach (string pat in paths) 
     { 
      bool result= dir.EnsureDirectoryExists(pat); 

      if (result==true) 
      { 
       //do nothing 
      } 
      else 
      { //create dir 
       dir.createdir(pat); 
      } 
     } 
     upload(path,filename); 

    } 
    private bool EnsureDirectoryExists(string pat) 
    { 

     try 
     { 
      //call the method the first path is exist ? 
      FtpWebRequest request = (FtpWebRequest)WebRequest.Create(pat); 
      request.Method = WebRequestMethods.Ftp.ListDirectory; 
      request.Credentials = new NetworkCredential("sh", "se"); 
      using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) 
      { 
       return true; 
      } 
     } 
     catch (Exception ex) 
     { return false; } 

    } 
    public void createdir(string pat) 
    { 
     try 
     { 
      FtpWebRequest createdir = (FtpWebRequest)FtpWebRequest.Create(new Uri(pat)); 
      createdir.Method = WebRequestMethods.Ftp.MakeDirectory; 
      createdir.Credentials = new NetworkCredential("sh", "se"); 
      createdir.UsePassive = true; 
      createdir.UseBinary = true; 
      createdir.KeepAlive = false; 
      FtpWebResponse response1 = (FtpWebResponse)createdir.GetResponse(); 
      Stream ftpStream1 = response1.GetResponseStream(); 
      ftpStream1.Close(); 
      response1.Close(); 
     } 
     catch (Exception ex) 
     { 
     } 

    } 

請我的代碼,如果任何的你們找到一個更好的辦法,建議我。

回答

0

這是確保目錄存在的很多代碼。有沒有一個Directory.Exists()方法(或類似的方法,你可以利用)?然後,您可以在上傳之前調用EnsureDirectoryExists()。

private bool EnsureDirectoryExists(string path) 
{ 
    // check if it exists 
    if (Directory.Exists(path)) 
     return true; 

    string parentPath = GetParentPath(path); 
    if (parentPath == null) 
     return false; 

    bool result = EnsureDirectoryExists(parentPath); 

    if (result) 
    { 
     CreateDirectory(path); 
     return true; 
    } 

    return false; 
} 

聲明:您可能需要稍微調整一下邏輯並使用FTP函數,但我希望您明白這一點。

+0

,感謝您的建議,不幸的是我不能創建目錄的方式你提到。即使ftp.makedirectory是兩行代碼來創建整個目錄,但如果你想創建在IIS FTP然後它不會讓你做在單行代碼中,您必須逐個創建每個目錄。 – Usher 2012-03-10 12:23:59

+0

我正在逐個創建每個目錄(所以開始創建父目錄)。是的,它可能是兩行代碼,我只有一行代碼,但我相信它比通過您提出的try/catch塊更簡單。 – thoean 2012-03-10 15:10:19

+0

,是的,我會減少大量的代碼,只是通過路徑創建一個一個。再次感謝您的幫助。 – Usher 2012-03-10 22:52:27