C# 使用OnSelectedIndexChanged自动打开txt文件
我试图做的是使用OnSelectedIndexChange方法自动将文件读入richTextBox。没有任何错误,只是完全不起作用。这是我正在使用的代码C# 使用OnSelectedIndexChanged自动打开txt文件,c#,.net-3.5,C#,.net 3.5,我试图做的是使用OnSelectedIndexChange方法自动将文件读入richTextBox。没有任何错误,只是完全不起作用。这是我正在使用的代码 public void comboBox1_OnSelectedIndexChanged(object sender, EventArgs e) { string selectedPath = comboBox1.SelectedItem.ToString(); if (File.Exists(@
public void comboBox1_OnSelectedIndexChanged(object sender, EventArgs e)
{
string selectedPath = comboBox1.SelectedItem.ToString();
if (File.Exists(@"C:\\Mavro\\MavBridge\\" + selectedPath + "\\ " + "Comment" + ".txt"))
{
try
{
Thread.Sleep(0500);
System.IO.StreamReader textFile = new System.IO.StreamReader(@"C:\\Mavro\\MavBridge\\" + selectedPath + "\\ " + "Comment" + ".txt");
richTextBox1.Text = textFile.ReadToEnd();
textFile.Close();
}
catch
{
MessageBox.Show("Error: File cannot be opened!", "Error");
}
}
else
{
MessageBox.Show("No comment was found in this folder", "Alert");
}
}
嗯,一个问题来自这样一个事实:
@“C:\\Mavro\\MavBridge\\”+selectedPath+“\\”+“Comment”+“.txt”
由于您使用的是逐字字符串(开头的@),因此不需要使用双斜杠
对于其余部分,请确保您的文件存在
后期编辑:我也不确定你是否在匆忙中复制/粘贴或诸如此类,但你是否真的将
catch
block放在try
内?好吧,一个问题来自于你有:
@“C:\\Mavro\\MavBridge\\”+selectedPath+“\\”+“Comment”+“.txt”
由于您使用的是逐字字符串(开头的@),因此不需要使用双斜杠
对于其余部分,请确保您的文件存在
稍后编辑:我也不确定你是否在匆忙中复制/粘贴或诸如此类的内容,但你是否真的将catch
block放在try
内了?1)你看到了什么错误
2) 你确定文件存在吗
3) 您确定代码创建的路径就是您期望的路径吗
4) 你为什么睡线
5) 为什么不直接使用
6) 如果代码运行时所使用的权限对文件没有访问权限(即使该文件确实存在),则将返回false。运行代码的用户是否具有权限
如果调用方具有所需的权限并且路径包含
现有文件的名称;否则,错误。此方法还返回
如果路径为null、无效路径或长度为零的字符串,则为false。如果
调用方没有足够的权限读取指定的
文件,则不会引发异常,并且该方法将返回false
路径的存在性
及
如果尝试执行时发生任何错误,Exists方法将返回false
确定指定的文件是否存在。这可能发生在某些情况下
引发异常,例如传递带有无效字符的文件名
字符或字符太多,磁盘出现故障或丢失,或者
调用方没有读取文件的权限
1) 您看到的错误是什么
2) 你确定文件存在吗
3) 您确定代码创建的路径就是您期望的路径吗
4) 你为什么睡线
5) 为什么不直接使用
6) 如果代码运行时所使用的权限对文件没有访问权限(即使该文件确实存在),则将返回false。运行代码的用户是否具有权限
如果调用方具有所需的权限并且路径包含
现有文件的名称;否则,错误。此方法还返回
如果路径为null、无效路径或长度为零的字符串,则为false。如果
调用方没有足够的权限读取指定的
文件,则不会引发异常,并且该方法将返回false
路径的存在性
及
如果尝试执行时发生任何错误,Exists方法将返回false
确定指定的文件是否存在。这可能发生在某些情况下
引发异常,例如传递带有无效字符的文件名
字符或字符太多,磁盘出现故障或丢失,或者
调用方没有读取文件的权限
在每个字符串之前去掉@。当前的目录使用实际的双斜杠,而不是C:\Mavro\MavBridge。在开头使用带\的单斜杠或带@,但不要同时使用这两个斜杠
另外,我强烈建议使用Path.Combine,而不是像那样将片段连接在一起。在每个字符串之前去掉@。当前的目录使用实际的双斜杠,而不是C:\Mavro\MavBridge。在开头使用带\的单斜杠或带@,但不要同时使用这两个斜杠
另外,我强烈建议使用Path.Combine,而不是像那样将各个部分连接在一起。只是为了好玩,让你尝试一下。首先,替换以下行:
if (File.Exists(@"C:\\Mavro\\MavBridge\\" + selectedPath + "\\ " + "Comment" + ".txt"))
为此:
if(File.Exists(string.Format("C:\\Mavro\\MavBridge\\{0}\\Comment.txt", selectedPath)))
看起来您有一个额外的空间(“\\\”+“Comment”
),所以我确信这就是为什么它从未命中这段代码。此外,每当您有一个需要关闭/处置的对象时,它通常会实现IDisposable,这意味着您应该使用块将该对象封装在中:
Thread.Sleep(0500);
try
{
using(System.IO.StreamReader textFile = new System.IO.StreamReader(string.Format("C:\\Mavro\\MavBridge\\{0}\\Comment.txt", selectedPath)))
{
richTextBox1.Text = textFile.ReadToEnd();
}
}
catch
{
MessageBox.Show("Error: File cannot be opened!", "Error");
}
但是,完全绕过StreamReader并使用System.IO.File.ReadAllText可以进一步简化:
richTextBox1.Text = System.IO.File.ReadAllText(string.Format("C:\\Mavro\\MavBridge\\{0}\\Comment.txt", selectedPath));
只是为了好玩,让你试试看。首先,替换以下行:
if (File.Exists(@"C:\\Mavro\\MavBridge\\" + selectedPath + "\\ " + "Comment" + ".txt"))
为此:
if(File.Exists(string.Format("C:\\Mavro\\MavBridge\\{0}\\Comment.txt", selectedPath)))
看起来您有一个额外的空间(“\\\”+“Comment”
),所以我确信这就是为什么它从未命中这段代码。此外,每当您有一个需要关闭/处置的对象时,它通常会实现IDisposable,这意味着您应该使用
块将该对象封装在中:
Thread.Sleep(0500);
try
{
using(System.IO.StreamReader textFile = new System.IO.StreamReader(string.Format("C:\\Mavro\\MavBridge\\{0}\\Comment.txt", selectedPath)))
{
richTextBox1.Text = textFile.ReadToEnd();
}
}
catch
{
MessageBox.Show("Error: File cannot be opened!", "Error");
}
但是,完全绕过StreamReader并使用System.IO.File.ReadAllText可以进一步简化:
richTextBox1.Text = System.IO.File.ReadAllText(string.Format("C:\\Mavro\\MavBridge\\{0}\\Comment.txt", selectedPath));
使用调试器查看发生的情况。确保文件不是空的。确保事件处理程序已实际注册到richTextBox
。(这不仅仅是名字的作用…)。另外,在处理程序的开头添加一个Debug.WriteLine(“blabla”)
,这样您就知道它正在被调用。@felipeoriani他说没有任何错误。它可以工作,但不显示文件内容。@DarenThomas您的意思是注册到组合框。。。事件是组合框上的索引更改。RTB仅显示结果。请使用调试器查看发生的情况。确保文件未被删除