2013-01-16 98 views
2

我如何在一個FTP請求創建一個子目錄目錄的小問題在一個ftp請求中創建一個包含子目錄的目錄?

我有一個字符串s

string s = "a/b/c/d" 

注:斜槓之間的話是隨機的,項目的數量是未知的。

如何創建FTP服務器的目錄A/B/C/d ????

我使用來實現這一點的辦法是分割字符串和用下面的代碼創建用於每個部分的文件夾:

var ftpWebRequest = (FtpWebRequest)WebRequest.Create("ftp://domain.com/public_html/a"); 
    ftpWebRequest.Credentials = new NetworkCredential(ftpUsername, ftpPassword); 
    ftpWebRequest.Method = WebRequestMethods.Ftp.MakeDirectory; 
    ftpWebRequest.GetResponse(); 

然後創建內的B的目錄,則c裏面b ,然後通過重複一些代碼,每個時間

我試圖直接鍵入URL內C D。如:

var ftpWebRequest = (FtpWebRequest)WebRequest.Create("ftp://doemin.com/public_html/a/b/c/d); 

但它不起作用。

是否有關於如何創建在一個單一的請求,與其他子目錄的文件夾一小段路?

+1

你考慮使用免費的開源的FTP庫,而不是本地框架的FtpWebRequest類的? – Steve

+0

爲什麼不使用免費的FTP庫:http://stackoverflow.com/questions/1371964/free-ftp-library。可能會更容易一些,我確信其中一個人可以在一次調用中即時處理這種情況。 – mellamokb

回答

1

如果您願意使用更加友好的庫(免費和開源的)像這樣的:

System.Net.FtpClient.dll

,那麼你可以寫這樣的代碼(改編自他們的榜樣)

static ManualResetEvent m_reset = new ManualResetEvent(false); 
void Main() 
{ 
    m_reset.Reset(); 
    using (FtpClient ftp = new FtpClient()) 
    { 
     ftp.Host = "yourFTPHost.com"; 
     ftp.Credentials = new NetworkCredential("yourUserName", "yourPassword"); 
     ftp.SetWorkingDirectory("/rootForTest"); 
     if(ftp.DirectoryExists("test")) 
      ftp.DeleteDirectory("test", true); 
     ftp.BeginCreateDirectory("test/path/that/should/be/created", true, 
        new AsyncCallback(CreateDirectoryCallback), ftp); 
     m_reset.WaitOne(); 
     ftp.Disconnect(); 
    } 
} 
static void CreateDirectoryCallback(IAsyncResult ar) 
{ 
    FtpClient ftp = ar.AsyncState as FtpClient; 
    try 
    { 
     if (ftp == null) 
      throw new InvalidOperationException("The FtpControlConnection object is null!"); 
     ftp.EndCreateDirectory(ar); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.ToString()); 
    } 
    finally 
    { 
     m_reset.Set(); 
    } 
} 

一個側面說明:System.Net.FtpClient需要完整的.NET 4.0框架。 (Cliente資料是不夠的)

0

某些服務器做支持像MKD A/B/C/d的FTP命令。如果您的服務器不支持,但支持通過SITE命令執行shell命令,則可以嘗試調用「SITE md a/b/c/d」(但這是針對計算機的)。如果上述方法都不起作用,那麼您必須像創建一個循環一樣創建文件夾,或者使用某個使用一種方法隱藏此循環的庫。

相關問題