如何获取文件夹中的所有文件?

时间:2016-12-02 10:31:58

标签: c# visual-studio file directory

在我的程序中,我有一个treeview,一个文件夹浏览器和一个datagridview。用户使用文件夹浏览器选择包含所有季节不同的节目的文件夹。我的程序在树视图中显示节目的文件夹和季节文件夹,每次从树视图中选择一个文件夹我希望它显示该文件夹中的所有文件。我现在正在使用此代码:

public void fileProcessDirectory(string targetDirectory, string Name)
    {

        string[] fileEntries = Directory.GetFiles(targetDirectory);
        foreach (string fileName in fileEntries)
        {
            FileProcessFile(fileName);
        }
        string[] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
        foreach (string subdirectory in subdirectoryEntries)
        {
            fileProcessDirectory(subdirectory, Name);
            break;
        }

    }
    public void FileProcessFile(string path)
    {
        dataGridView.Rows.Add(path, "New");
    }

它显示了我拥有的第一个子文件夹中的文件。它用于显示所有文件夹中的所有文件,所以我添加了一个中断,现在它显示前3个文件并停在那里。所以我希望它显示所选子文件夹中的文件而不是所有子文件夹。

2 个答案:

答案 0 :(得分:1)

您可以尝试修改您的功能:

public void FileProcessDirectory(string targetDirectory, string subfolder)
{
    // this adds files
    foreach (string fileName in Directory.GetFiles(targetDirectory))
    {
        FileProcessFile(fileName);
    }

    // if we pass subfolder as empty then nothing happens
    if(string.IsNullOrEmpty(subfolder)) return;
    // here we find our subfolder and display files for it        
    FileProcessDirectory(Directory.GetDirectories(targetDirectory).Where(d => d == targetDirectory + "\\" + subfolder).ToArray()[0], null);
}

和消息示例:

FileProcessDirectory(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "Debug");

答案 1 :(得分:0)

如果我错了,请纠正我的理解: 用户选择文件夹,然后在树视图中选择季节然后他们应该在数据网格中查看里面的所有文件,对吗?

我以这种方式实施

treeView1.NodeMouseDoubleClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick);

如果用户双击treenode,它会显示数据网格中的所有文件:

void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        if (treeView1.SelectedNode != null)
        {
            dataGridView1.Rows.Clear();
            string[] fileEntries = System.IO.Directory.GetFiles(treeView1.SelectedNode.Text);
            foreach (string fileName in fileEntries)
            {

                dataGridView1.Rows.Add(Path.GetFileName(fileName));
            }
        }
    }

我猜之前的问题可能是由dataGrid没有清除旧文件引起的。希望它有所帮助。