在富文本框中从树视图中打开选定的文件

Open selected file from treeview in a 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 returns正确的路径,我用消息框确认。

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

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

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

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

如果文件要相对于执行文件存储,你应该添加一些..\作为前缀——它代表'going one level upper'

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

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

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

TreeView.SelectedNode.FullPath 将 return 路径: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);
}

希望这对您有所帮助。感谢您在解决此问题时提供的帮助。