C# 如何创建递归目录结构的循环?
如果目录不存在,我就是这样检查和创建目录的:C# 如何创建递归目录结构的循环?,c#,.net,winforms,recursion,C#,.net,Winforms,Recursion,如果目录不存在,我就是这样检查和创建目录的: private void MakeDir(string dirName) { FtpWebResponse response = null; Stream ftpStream = null; try { FtpWebRequest reqFTP; string[] Files
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
}
}
这就是你需要的所有复发 我看不到您所展示的方法中有任何递归。不应该有一些循环吗?这是我的问题,如何在MakeDir方法中添加/生成递归循环。今天,MakeDir方法检查目录是否存在,如果不存在,则创建目录,但它不会创建包含子目录(如d/test1/test2/test3)的目录,它将只创建类似d的目录,或者如果目录名为testing1,但如果是类似testing1/testing2/testing3的结构,则需要递归循环。我的问题是如何添加/生成递归循环。如果变量dirName中的目录名不是一个目录名而是一个类似于:d/test1/test2/test3的结构,那么我需要MakeDir中的递归循环来创建该结构。