在单个FTP请求中创建具有子目录的目录
本文关键字:子目录 创建 单个 FTP 请求 | 更新日期: 2023-09-27 17:53:40
关于如何在单个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();
然后我在a中创建b目录,然后在b中创建c目录,然后在c中创建d目录,每次都重复一些代码
我尝试直接键入url。如:
var ftpWebRequest = (FtpWebRequest)WebRequest.Create("ftp://doemin.com/public_html/a/b/c/d);
但是它不工作。
是否有一个简短的方法,如何我可以创建一个文件夹与其他子目录在一个单一的请求?
如果您愿意使用像这样的更友好的库(免费和开源):
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框架。(客户端配置文件不够)
一些服务器确实支持FTP命令,如MKD a/b/c/d。如果您的服务器不支持通过SITE命令执行shell命令,您可以尝试调用"SITE md a/b/c/d"(但这是特定于机器的)。如果以上方法都不起作用,那么你必须在循环中创建文件夹,或者使用一些库将该循环隐藏在一个方法中。