Ftp.MakeDirectory嵌套结构

如果你缺乏在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的exception

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

  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); } } } 

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

  1. 创建一个接受Uri的make目录方法。
  2. 确保您可以区分路径的一部分不存在的错误和其他错误。
  3. 如果它只是路径错误,请重新抛出exception。
  4. 如果是路径错误:
  5. 修剪路径中的最后一个目录。
  6. 如果没有更多的东西可以通过抛出适当的新exception来修剪戒掉。
  7. 尝试创建新路径。
  8. 然后尝试再次创建最终目录。

从本质上讲,它变为递归的两个限制条件,非路径exception发生,没有任何东西需要修剪。