C# 在richtextbox中从treeview打开所选文件

C# 在richtextbox中从treeview打开所选文件,c#,path,treeview,richtextbox,C#,Path,Treeview,Richtextbox,我的应用程序由一个TreeView、一个RichTextBox和一个按钮组成。 树状视图显示我的系统的内容(目录、文件夹和文件)。 按下按钮时,应该从树视图中获取所选文件并将其显示在RichTextBox中。 我使用了以下代码: private void button_Click(object sender, EventArgs e) { string a = TreeView.SelectedNode.FullPath; M

我的应用程序由一个TreeView、一个RichTextBox和一个按钮组成。 树状视图显示我的系统的内容(目录、文件夹和文件)。 按下按钮时,应该从树视图中获取所选文件并将其显示在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(一个,RichTextBoxStreamType.PlainText)
行中存在运行时异常。 它将调试文件夹的路径附加到实际选定的文件路径()之前,这将导致异常。 所有文件都存储在本地。
如何解决此问题?

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

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

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

如果文件应相对执行文件进行存储,则应添加一些
。\
作为前缀-它代表“向上一级”的意思


您可以阅读以更熟悉windows路径名样式。

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

此问题背后的原因是代码
TreeView.SelectedNode.FullPath
返回的路径语法不正确。 假设您在树视图中选择的文件具有路径
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);
}

希望这有帮助。感谢您在解决此问题时给予我的帮助

你的文件存储在哪里?我猜不在您屏幕上的目录中。@MightyBadaboom树视图显示我系统上所有可用的文件。对于同一目录中的文件或其他位置的文件,结果是相同的。即使要打开的文件已被删除,也会追加调试文件夹路径。如图所示,@MightyBadaboom解决了这个问题。很高兴听到:)很抱歉我的软件背景不好,但是我如何在FullPath属性中存储完整路径(包括驱动器名)。我理解这个问题,但我仍然无法真正找到解决方案。谢谢你的帮助。现在如何设置FullPath属性,如何初始化TreeView?当我们可以看到您的源代码时,帮助您会更容易。我不知道如何填充节点,因此我无法在这里帮助您。如果我的回答对你有帮助,请投票:)@MikhailNeofitov我是新来的,我的投票还不算,谢谢你的帮助!