如何创建一个循环来创建递归目录结构?

时间:2014-12-18 09:38:38

标签: c# .net winforms recursion

如果目录不存在,这就是我检查和创建目录的方式:

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方法中构建递归循环?

最后,我们的目标是以递归方式创建目录结构。

1 个答案:

答案 0 :(得分:0)

忘记了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
    }
}

这就是你需要的所有重复性。