2017-03-09 50 views
2

我的应用程序由一个TreeView,一个RichTextBox和一个Button组成。 TreeView显示我的系统的内容(目录,文件夹和文件)。 按下按钮应该从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); 
    } 

在字符串的值是正确的,即TreeView.SelectedNode.FullPath返回我与在MessageBox确认正确的路径。

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

+0

你的文件存储在哪里?我想不是在你的屏幕上的目录。 –

+0

@MightyBadaboom treeView显示我的系统上所有可用的文件。结果对于相同目录中的文件或某个其他位置中的文件而言是相同的。即使要打开的文件也会附加debug文件夹路径。显示在图片[链接](http://i65.tinypic.com/plx5k.png) –

+0

@MightyBadaboom解决了这个问题。 –

回答

0

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

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

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

,我去了就是,把这个输出到一个临时字符串,并在第2位(第一个指数)将:\\,从而使语法正确的解决方案。(C:\\用户...)

搭我只是用于参考代码:

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); 
} 

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

1

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

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

如果路径以文件夹名称开头,应用程序会尝试获取当前活动文件夹(Debug)的内部文件夹。如果路径以\开头 - 如果路径以驱动器名D:\开头 - 应用程序将查找该驱动器上的文件,则应用程序将在当前驱动器的根文件夹中查找该文件。所以,就你而言,最好总是传递绝对路径,它会在搜索文件时排除模糊性。

如果该文件应相对存储到可执行文件,你应该加入一些..\前缀 - 它代表了“走出一个级别上”

您可以阅读this获得更多熟悉Windows路径的风格。

+0

我很抱歉软件背景较弱,但如何将完整路径(包括驱动器名称)存储在FullPath属性中。 –

+0

我理解了这个问题,但我仍然无法真正地找到解决方案。不过谢谢你的帮忙。 –

+0

如何设置FullPath属性,以及如何初始化TreeView?当我们看到您的源代码时,更容易帮助您。 –