如何创建一个将创建递归目录结构的循环
本文关键字:创建 结构 循环 递归 何创建 一个 | 更新日期: 2023-09-27 18:34:31
如果
目录不存在,这就是我检查和创建目录的方式:
private void MakeDir(string dirName)
{
FtpWebResponse response = null;
Stream ftpStream = null;
try
{
FtpWebRequest reqFTP;
string[] Files = GetFileList();
ArrayList arrDirectories = new ArrayList();
if (Files != null)
{
foreach (string dir in Files)
{
arrDirectories.Add(dir);
}
}
if (!arrDirectories.Contains(dirName))
{
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + f.Host + "/" + dirName));
reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
reqFTP.UseBinary = true;
reqFTP.KeepAlive = false;
reqFTP.Proxy = null;
reqFTP.Credentials = new NetworkCredential(f.Username, f.Password);
response = (FtpWebResponse)reqFTP.GetResponse();
ftpStream = response.GetResponseStream();
}
}
catch (Exception ex)
{
if (ftpStream != null)
{
ftpStream.Close();
}
if (response != null)
{
response.Close();
}
}
}
这是方法GetFileList:
public string[] GetFileList()
{
string[] downloadFiles;
StringBuilder result = new StringBuilder();
WebResponse response = null;
StreamReader reader = null;
try
{
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + f.Host + "/"));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(f.Username, f.Password);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
reqFTP.Proxy = null;
reqFTP.KeepAlive = false;
reqFTP.UsePassive = false;
response = reqFTP.GetResponse();
reader = new StreamReader(response.GetResponseStream());
string line = reader.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("'n");
line = reader.ReadLine();
}
result.Remove(result.ToString().LastIndexOf(''n'), 1);
return result.ToString().Split(''n');
}
catch (Exception ex)
{
if (reader != null)
{
reader.Close();
}
if (response != null)
{
response.Close();
}
downloadFiles = null;
return downloadFiles;
}
}
在 MakeDir 中,我给出了一个目录名称,例如名称是:D
如果目录名称 D 不存在,它将创建目录 D.直到这里没有问题。但是,如果我给出的目录是 D/Test1/Test2/Test3/Test4/Test5,并且假设只有 D 存在,那么现在我需要以某种方式添加一个递归循环到另一种情况可能是我已经有一个目录结构:D/Test1/Test2/Test3,我给出一个目录来创建 D/Test1/Test2/Test3/Test4/Test5,我知道 D/Test1/Test2/Test3 已经存在,所以我只需要创建:D/Test1/Test2/Test3/Test4,
然后 D/Test1/Test2/Test3/Test4/Test5
但在所有情况下,它都应该像这样创建它:D/Test1/Test2/Test3 将在 D/Test1/Test2 下创建 Test3,D/Test1/Test2/Test3/Test4 将在 D/Test1/Test2/Test3 下创建。
如何在 MadeDir 方法中构建递归循环?
最后,目标是递归创建目录结构。
忘记了
FTP部分,因为我认为它在这里没有区别,所以应该是这样的:
public void Sync(string src, string target){
EnsureTargetExists(target);
CopyFiles(src, target);
foreach(var dir in GetDirectories(src)){
Sync(src+"/"+dir, target+"/"+dir);//recurence call
}
}
这就是您需要的所有重新出现。