Ftp.MakeDirectory嵌套结构

时间:2012-02-02 19:01:22

标签: c# ftp

如果你缺乏在ftp上创建子目录的权限,你们会怎么做? 显然你无法在一个命令中创建一个目录

所以这个:

path = "ftp://someftp.com/files/newFolder/innerFolder";
var request = (FtpWebRequest)WebRequest.Create(path);
request.Method = WebRequestMethods.Ftp.MakeDirectory;
var response = (FtpWebResponse)request.GetResponse());
如果'files'或'newFolder'已经存在,

将抛出错误代码为550的异常

  1. 如何检查我是否有权创建子目录?

  2. 如果我没有这些权利,我该怎么办?请告诉我,您可以使用多个命令创建文件夹结构。

2 个答案:

答案 0 :(得分: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 :(得分:1)

你是对的。您无法在一个命令中为FTP创建整个路径。最简单的方法可能如下:

  1. 创建一个接受Uri的make目录方法。
  2. 确保您可以区分路径的一部分不存在的错误和其他错误。
  3. 如果它只是路径错误,请重新抛出异常。
  4. 如果是路径错误:
  5. 修剪路径中的最后一个目录。
  6. 如果没有其他方法可以通过抛出适当的新异常来修剪退出。
  7. 尝试创建新路径。
  8. 然后尝试再次创建最终目录。
  9. 基本上,它变为递归,有两个限制条件,非路径异常发生,没有任何东西需要修剪。