我的陈述不正常

时间:2014-10-21 06:43:59

标签: c# for-loop

我已经尝试了很多不同的for循环迭代,并且所有这些迭代都不能正常工作或只能工作一半。所以我无法弄明白。 以下是我的形式:

enter image description here

因此,当我单击“创建文件夹”按钮时,它应该为树视图(Named FolderTV)中的每个节点创建一个文件夹。 它目前所做的只是创建New_Mod文件夹和Data文件夹。我希望它为每个节点和子节点创建一个文件夹。例如,它将创建New_Mod文件夹,然后在该文件夹中它将创建Data,Models和Textures文件夹,并在Data文件夹中创建一个Scripts文件夹。

以下是该按钮的代码:

private void button3_Click(object sender, EventArgs e)    
    {
        for (int i = 0; i <= FoldersTV.Nodes.Count; i++)
        {

            FoldersTV.SelectedNode = FoldersTV.TopNode;
            MessageBox.Show("Current Node: " + FoldersTV.SelectedNode.Text.ToString());
            Directory.CreateDirectory(SEAppdata + "\\" + FoldersTV.SelectedNode.Text.ToString());
            for (int x = 0; x <= FoldersTV.Nodes.Count; x++)
            {
                TreeNode nextNode = FoldersTV.SelectedNode.NextVisibleNode;
                MessageBox.Show("Next Node: " + nextNode.Text.ToString());
                Directory.CreateDirectory(SEAppdata + "\\" + FoldersTV.SelectedNode.Text.ToString() + "\\" + nextNode.Text.ToString());
                x++;
            }
            i++;
        }

    }

1 个答案:

答案 0 :(得分:1)

尝试这个(未经测试的)递归解决方案并尝试先理解它;)

private void CreateDirs(string path, IEnumerable<TreeNode> nodes) {
    foreach(var node in nodes) {
    //  string dir = path + "\\" + node.Text;
        string dir = Path.Combine(path, node.Text);
        Directory.CreateDirectory(dir);
        CreateDirs(dir, node.Nodes);
    }
}

private void button3_Click(object sender, EventArgs e) {
    CreateDirs(SEAppdata, FoldersTV.Nodes);
}

编辑版本,调试打印输出很少:

// using System.Diagnostics;
private void CreateDirs(string path, IEnumerable<TreeNode> nodes) {

//  iterate through each node (use the variable `node`!)
    foreach(var node in nodes) {
    //  combine the path with node.Text
        string dir = Path.Combine(path, node.Text);

    //  create the directory + debug printout
        Debug.WriteLine("CreateDirectory({0})", dir);
        Directory.CreateDirectory(dir);

    //  recursion (create sub-dirs for all sub-nodes)
        CreateDirs(dir, node.Nodes);
    }
}

请参阅: System.Diagnostics.Debug.WriteLine