我的应用程序包含一个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文件夹的路径,这会导致异常。
所有文件都存储在本地。
我该如何解决这个问题?
答案 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);
}
希望这会有所帮助。感谢您在解决此问题时获得的帮助。