将文件保存在树视图中,但无法将它们取出
Keeping files in treeview, but having troubles with taking them out
所以,我有一个 c# windows 表单。
我将带有文件的根目录放到 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);
}
当我尝试将节点转换为文件时它崩溃了。
我想我在过程中丢失了原始根目录的路径,这导致了问题,但我不知道如何防止这种情况发生。如果在添加功能时我使用 "FullName" 而不是 "Name" 程序显示每个显示文件的完整路径,但是当我尝试将它们转换为 FileInfo 变量时它仍然崩溃。
我该怎么办?
您不能真正将 FileInfo
个对象直接添加为 Nodes
。构造函数需要一个 string
并且您不能将该节点从 string
..
转换回 FileInfo
我建议将 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
}
所以,我有一个 c# windows 表单。 我将带有文件的根目录放到 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);
}
当我尝试将节点转换为文件时它崩溃了。 我想我在过程中丢失了原始根目录的路径,这导致了问题,但我不知道如何防止这种情况发生。如果在添加功能时我使用 "FullName" 而不是 "Name" 程序显示每个显示文件的完整路径,但是当我尝试将它们转换为 FileInfo 变量时它仍然崩溃。 我该怎么办?
您不能真正将 FileInfo
个对象直接添加为 Nodes
。构造函数需要一个 string
并且您不能将该节点从 string
..
FileInfo
我建议将 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
}