将文件保存在树视图中,但在将其取出时遇到麻烦

时间:2016-05-06 02:03:51

标签: c# winforms treeview

所以,我有一个c#窗体。 我将带有文件的根目录放到TreeView

public void ProcessDirectory(string targetDirectory)
    {
        DirectoryInfo x = new DirectoryInfo(targetDirectory);
        treeView1.Nodes.Clear();
        treeView1.Nodes.Add(ProcessFiles(x));
    }

    private static TreeNode ProcessFiles(DirectoryInfo directoryInfo)
    {
        var directoryNode = new TreeNode(directoryInfo.Name);
        foreach (var directory in directoryInfo.GetDirectories())
            directoryNode.Nodes.Add(ProcessFiles(directory));
        foreach (var file in directoryInfo.GetFiles())
            directoryNode.Nodes.Add(new TreeNode(file.Name));
        return directoryNode;
    }

他们表现得很好。 但后来我尝试删除它们。

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        ((TreeView)sender).SelectedNode = e.Node;
    }

    private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
    {
        string path = ((TreeView)sender).SelectedNode.FullPath;
        FileInfo temp = new FileInfo(path);
        File.Delete(temp.Name);
    }

当我尝试将Node转换为File时崩溃了。 我想我在过程中失去了原始根的路径并导致了问题,但我不知道如何防止这种情况。如果在添加功能时使用" FullName"而不只是"姓名"程序显示每个显示文件的完整路径,但是当我尝试将它们转换为FileInfo变量时,它仍然崩溃。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

您无法直接将FileInfo个对象添加为Nodes。构造函数需要string,您无法从该FileInfo将该节点强制转换为string ..

我建议将FileInfo添加到Node.Tag属性:

foreach (var file in directoryInfo.GetFiles())
{
    TreeNode node = directoryNode.Nodes.Add(new TreeNode(file.Name));
    node.Tag = file;
}

现在要删除一个,你可以像这样访问FileInfo:

FileInfo FI = someNode.Tag as FileInfo;

确保它有效,然后处理:

if (FI != null)         
{
   // do your thing
}