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
-
如何检查我是否有权创建子目录?
-
如果我没有这些权利,我该怎么办? 请告诉我,您可以在多个命令中创建文件夹结构。
好吧:因为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创建整个路径。 最简单的方法可能如下:
- 创建一个接受Uri的make目录方法。
- 确保您可以区分路径的一部分不存在的错误和其他错误。
- 如果它只是路径错误,请重新抛出exception。
- 如果是路径错误:
- 修剪路径中的最后一个目录。
- 如果没有更多的东西可以通过抛出适当的新exception来修剪戒掉。
- 尝试创建新路径。
- 然后尝试再次创建最终目录。
从本质上讲,它变为递归的两个限制条件,非路径exception发生,没有任何东西需要修剪。