如何使方法递归?

时间:2014-08-26 07:35:27

标签: c# directory subdirectory

在最后几天,我创建了一个方法,该方法获取文件夹中的文件和第一个子文件夹中的文件,但不包含这些子文件夹的子文件夹中的文件。

更好地解释一下:

那是文件夹:

//Folder1
//├file1.txt
//├subfolder1
//|├file2.txt
//|└subfolder3
//| └file3.txt
//└subfolder2
// └subfolder4
//  └subfolder5
//   └file4.txt

这就是我得到的:

//Folder1
//├file1.txt
//└subfolder1
// └file2.txt

这就是我将它复制到文件夹中的方式:

//Folder2
//├file1.txt
//├subfolder1___file2.txt
//├subfolder1___subfolder3___file3.txt
//└subfolder2___subfolder4___subfolder5___file4.txt

并告诉我如何拥有它:

//Folder2
//├file1.txt
//└subfolder1___file2.txt

(更好地理解这些结构,阅读代码)

当前代码:

private void GetFiles(string filePath)
{
    //filepath = "C:\Example\folder1"
    string[] installfiles = Directory.GetFiles(Path.GetDirectoryName(filePath));
    string appdatafolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
    string[] SelectedFiles;

    foreach (string file in installfiles)
    {
        string fileName = Path.GetFileName(file);

        if (!Directory.Exists(appdatafolder + "\\temp"))
        {
            Directory.CreateDirectory(appdatafolder + "\\temp");
        }
        if (!File.Exists(sourcefoldervalueLabel.Text + "\\" + fileName))
        {
            File.Copy(filePath + filename, appdatafolder + "\\temp\\" + fileName, true);
        }
    }

//here I would make it recursive.

    if (Directory.GetDirectories(Path.GetDirectoryName(filePath)).Length >= 1)
    {
        string[] subdirectoryies = Directory.GetDirectories(filePath);
        foreach (string directory in subdirectoryies)
        {
            string[] SubFiles = Directory.GetFiles(directory);
            string directoryname = Path.GetFileName(directory);

            foreach (string file in SubFiles)
            {
                string filename = Path.GetFileName(file);
                if (!File.Exists(sourcefoldervalueLabel.Text + "\\" + directoryname + "\\" + filename))
                {
                     File.Copy(file, appdatafolder + "\\temp\\" + directoryname + "___" + filename, true); // here I copy it into Folder2 but instead of creating subfolders I add "___" between the subfolder-name and the file-name
                }
            }
        }
    }
}

因此,如果我在我设置的位置(看代码)进行递归,我可以在每个文件夹中获取文件(我想其他方法告诉我)。

所以我的问题是:

如果当前文件夹中有子文件夹,我怎样才能每次重复“标记”代码?

我希望这个问题是可以理解的(其他我会解释)。

一如既往,你可以用各种方式纠正我:)。

祝你有个美好的一天,

温和。

2 个答案:

答案 0 :(得分:0)

这种情况的完美代码是Right Tree算法。

答案 1 :(得分:0)

好的,我在查找了一些递归编程后解决了它

最终守则:

private void GetFilesinDirectory(string directory,string targetdirectory)
{
    string [] directories = Directory.GetDirectories(directory);
    if(directories.Length >= 1)
    {
        for (int i = 0; i < directories.Length; i++)
        {
            GetFilesinDirectory(directories[i], targetdirectory);
        }
    }
    string[] files = Directory.GetFiles(directory);
    if (files.Length >= 1)
    {
        for (int i = 0; i < files.Length; i++)
        {
            string filename = Path.GetFileName(files[i]);
            string filenamewithoutdeploy = filename.Replace(".deploy", string.Empty);

            string directoryunderscoreName = directory.Replace(InstallfoldervalueLabel.Text + "\\Appfiles\\", String.Empty)
                                                .Replace("\\","___");
            string directoryname = directory.Replace(InstallfoldervalueLabel.Text + "\\Appfiles\\", String.Empty);

            if (!File.Exists(sourcefoldervalueLabel.Text + "\\" + directoryname + "\\" + filenamewithoutdeploy))
            {
                File.Copy(directory + "\\" + filename, targetdirectory + directoryunderscoreName + "___" + filename, true);
            }
        }
    }
}

我会很乐意得到一些更正,建议:)