Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建递归目录结构的循环?_C#_.net_Winforms_Recursion - Fatal编程技术网

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中的递归循环来创建该结构。