【问题标题】:Open selected file from treeview in a richtextbox在富文本框中从树视图中打开选定的文件
【发布时间】:2017-03-09 08:50:22
【问题描述】:

我的应用程序由 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 文件夹的路径,这会导致异常。 所有文件都存储在本地。 我该如何解决这个问题?

【问题讨论】:

  • 您的文件存储在哪里?我猜不在你屏幕上的目录中。
  • @MightyBadaboom 树视图显示我系统上的所有可用文件。对于同一目录中的文件或其他位置的文件,结果是相同的。即使要打开的文件也会附加调试文件夹路径。如图所示link
  • @MightyBadaboom 解决了这个问题。
  • 很高兴听到:)

标签: c# path treeview richtextbox


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 很抱歉软件背景薄弱,但是如何将完整路径(包括驱动器名称)存储在 FullPath 属性中。
  • 我理解了这个问题,但我仍然无法真正找到解决方案。不过感谢您的帮助。
  • 此时如何设置FullPath属性,如何初始化TreeView?当我们可以看到您的源代码时,会更容易为您提供帮助。
  • 我不知道你是如何填充节点的,所以在这里我无法帮助你。如果我的回答对你有帮助,请点赞:)
  • @MikhailNeofitov 我是新手,我的点赞还不算数,感谢您的帮助!
【解决方案2】:

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

这个问题背后的原因是代码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);
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-13
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多