2013-01-16 103 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”(但这是针对计算机的)。如果上述方法都不起作用,那么您必须像创建一个循环一样创建文件夹,或者使用某个使用一种方法隐藏此循环的库。

相关问题