使用列表视图和树视图列出文件夹和文件

本文关键字:视图 文件夹 文件 列表 | 更新日期: 2023-09-27 18:34:48

我有一个包含两个控件(TreeView和ListView(的Windows窗体,我想显示TreeView中特定路径的所有目录,当用户单击TreeView中列出的任何目录时,该目录的所有文件都显示在ListView中。

这是我的代码:

Form_Load事件处理程序中,我将 E Drive 中的所有目录加载到 treeView1

 private void Form1_Load(object sender, EventArgs e)
    {
        DirectoryInfo dInfo = new DirectoryInfo(@"E:'");
        foreach (DirectoryInfo d in dInfo.GetDirectories())
        {
            treeView1.Nodes[0].Nodes.Add(d.Name);
        }
    }

问题是这样的:

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
    {
        try
        {
            DirectoryInfo dInfo = new DirectoryInfo(e.Node.Text);
            foreach (FileInfo f in dInfo.GetFiles())
            {
                listView1.Items.Add(f.Name);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, ex.Source);
        }
    }

当任何主体单击树视图 1 中的任何目录时,代码会跳转到 catch,而不是列出 listView1 中的所有文件。

异常消息:找不到路径的一部分。

使用列表视图和树视图列出文件夹和文件

您需要向树节点添加一些数据。您可以将完整的路径名放在Text中,方法是将代码更改为:

treeView1.Nodes[0].Nodes.Add(d.FullName);

或者,您可以使用 Name ,并向TreeNodeTag字段添加一些额外的数据。

var node = treeView1.Nodes[0].Nodes.Add(d.Name);
node.Tag = d;

然后,当您需要该目录的文件时,您可以编写:

DirectoryInfo dInfo = (DirectoryInfo)e.Node.Tag;
foreach (FileInfo f in dInfo.GetFiles())
...

如果您不想保留所有这些DirectoryInfo引用,则可以将FullName放在Tag字段中:

node.Tag = d.FullName;

然后,当您去检索文件时:

DirectoryInfo dInfo = new DirectoryInfo((string)e.Node.Tag);