在richtextbox中从树视图打开所选文件

时间:2017-03-09 08:50:23

标签: c# path treeview richtextbox

我的应用程序包含一个TreeView,一个RichTextBox和一个Button。 TreeView显示我系统的内容(目录,文件夹和文件)。 按下按钮时,应该从TreeView中获取所选文件并将其显示在RichTextBox中。 我使用了以下代码:

    private void button_Click(object sender, EventArgs e)
    {
        string a = TreeView.SelectedNode.FullPath;           
        MessageBox.Show(a);  //To check if it's taking the correct path
        richTextBox1.LoadFile(a, RichTextBoxStreamType.PlainText);
    }

字符串a中的值是正确的,即TreeView.SelectedNode.FullPath返回我使用MessageBox确认的正确路径。

但是richTextBox1.LoadFile(a, RichTextBoxStreamType.PlainText)行中存在运行时异常。 它在实际选定的文件路径(shown in the image)之前附加Debug文件夹的路径,这会导致异常。 所有文件都存储在本地。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

这是因为您的树节点包含项目的相对路径,而不是绝对

如何预防?首先,您应该将完整路径(包括驱动器名称)存储在FullPath属性中。

如果路径以文件夹名称开头,则应用程序尝试获取当前活动文件夹的内部文件夹(Debug)。如果路径以\开头 - 应用程序将在当前驱动器的根文件夹中搜索该文件,如果路径以驱动器名称D:\开头 - 应用程序将在此驱动器上搜索该文件。因此,在您的情况下,总是传递绝对路径会更好,它会在搜索文件时排除歧义。

如果文件应该相对于执行文件存储,你应该添加一些..\作为前缀 - 它代表“走上一级”

您可以阅读this以更熟悉Windows路径名称样式。

答案 1 :(得分:0)

经过一些研究和试验后,我找到了解决这个问题的方法。

此问题背后的原因是代码TreeView.SelectedNode.FullPath返回语法不正确的路径。 假设您在TreeView中选择的文件具有路径C:\Users\Admin\Desktop\test.txt

TreeView.SelectedNode.FullPath将返回路径:C\Users\Admin\Desktop\test.txt,这在语法上是不正确的,即它不能直接用于代码的其他部分。

我采用的解决方案是将此输出放入临时字符串,并在第二位(第一个索引)插入:\\,从而使语法正确。(C:\\ Users ... )

列出我以前用于参考的代码:

private void button_Click(object sender, EventArgs e)
{
    string a = TreeView.SelectedNode.FullPath.ToString();
    string b = ":\\";
    string c = a.Insert(1, b);
    richTextBox1.LoadFile(c, RichTextBoxStreamType.PlainText);
}

希望这会有所帮助。感谢您在解决此问题时获得的帮助。