2012-02-02 245 views
1

如果你缺少在ftp上創建子目錄的權限,你們會怎麼做? 顯然,你不能在一個命令Ftp.MakeDirectory嵌套結構

創建一個目錄,以便此:

path = "ftp://someftp.com/files/newFolder/innerFolder"; 
var request = (FtpWebRequest)WebRequest.Create(path); 
request.Method = WebRequestMethods.Ftp.MakeDirectory; 
var response = (FtpWebResponse)request.GetResponse()); 

將拋出錯誤代碼的異常550如果「文件」或「newFolder」已經存在

  1. 如何檢查我是否有權創建子目錄?

  2. 如果我沒有這些權限,該怎麼辦?讓我看看代碼,它可以讓你在多個命令中創建一個文件夾結構。

+0

什麼繞着該線然後VAR請求=(的FtpWebRequest)WebRequest.Create(路徑)菱一個例子; FtpWebRequest和WebRequest之間有真正的區別嗎?我認爲有.. – MethodMan 2012-02-02 19:21:09

回答

2

好的:因爲FtpWebRequest是無狀態的 - 沒有辦法改變FTP上的當前目錄。幸運的是,我們可以使用其中一個開源FTP庫。下面是與AlexPilotti的FTPS庫,它是通過的NuGet

using (var client = new FTPSClient()) 
{ 
    var address = Regex.Match(path, @"^(ftp://)?(\w*|.?)*/").Value.Replace("ftp://", "").Replace("/", ""); 
    var dirs = Regex.Split(path.Replace(address, "").Replace("ftp://", ""), "/").Where(x => x.Length > 0); 
    client.Connect(address, credential, ESSLSupportMode.ClearText); 
    foreach (var dir in dirs) 
    { 
     try 
      { 
       client.MakeDir(dir); 
      } 
     catch (FTPException) 
     { 
     } 
     client.SetCurrentDirectory(dir); 
    } 

    } 
} 
1

你是對的。您不能在一個命令中創建一個完整的路徑到FTP。最簡單的方法如下:

  1. 創建一個make目錄方法,接受Uri。
  2. 確保您可以區分部分路徑不存在的錯誤和其他錯誤。
  3. 如果只是路徑錯誤,則重新拋出異常。
  4. 如果是路徑錯誤:
  5. 修剪路徑中的最後一個目錄。
  6. 如果沒有什麼更多的拋出一個適當的新的異常修剪退出。
  7. 嘗試創建新路徑。
  8. 然後嘗試再次創建最終目錄。

所以基本上,它變成遞歸,帶有兩個限制條件,發生非路徑異常並且沒有任何修剪。

+0

而我需要以某種方式更改當前目錄..對嗎? 1)嘗試創建外部目錄,2)如果已經存在:更改當前目錄,3)創建內部目錄等 – Agzam 2012-02-02 19:56:59

+1

實際上,如果您使用完整路徑,則更改目錄是不必要的。基本上,您可以通過每次從路徑的最右邊到最後刪除所有內容來創建新(父)路徑。使用UriBuilder只能在路徑部分進行操作,而不能修改方案和主機部分。 – JamieSee 2012-02-02 20:49:45