我要做的是使用OnSelectedIndexChange方法自动将文件读入richTextBox。没有任何错误,它只是没有工作。下面是我正在使用的代码
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");
}
}
答案 0 :(得分:3)
只是为了好玩,让我们尝试一下。首先,替换以下行:
if (File.Exists(@"C:\\Mavro\\MavBridge\\" + selectedPath + "\\ " + "Comment" + ".txt"))
用这个:
if(File.Exists(string.Format("C:\\Mavro\\MavBridge\\{0}\\Comment.txt", selectedPath)))
看起来你有一个额外的空间("\\ " + "Comment"
),所以我确定这就是为什么它永远不会碰到这段代码。此外,只要您有一个需要关闭/处置的对象,通常它会实现IDisposable,这意味着您应该将对象封装在using
块中:
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));
答案 1 :(得分:2)
嗯,有一个问题来自于你有:
@"C:\\Mavro\\MavBridge\\" + selectedPath + "\\ " + "Comment" + ".txt"
由于您使用的是逐字字符串(开头的 @ ),因此您无需添加双斜杠。
其余的,请确保您的文件存在。
稍后编辑:我也不确定你是否匆匆复制/粘贴,但是你真的把catch
阻止置于 try
?
答案 2 :(得分:1)
1)你看到的错误是什么?
2)你肯定文件存在吗?
3)您是否肯定您的代码创建的路径是您期望的路径?
4)你为什么要睡觉呢?
5)为什么不使用File.ReadAllText?
6)File.Exists如果代码运行时具有无权访问文件的权限,则返回false,即使文件确实存在。您的代码运行的用户是否具有权限?
如果调用者具有所需权限且路径包含,则为true 现有文件的名称;否则,错误。此方法也会返回 如果path为null,无效路径或零长度字符串,则返回false。如果 调用者没有足够的权限来读取指定的 文件,没有抛出异常,方法返回false,无论如何 路径的存在。
和
如果在尝试时发生任何错误,则Exists方法返回false 确定指定的文件是否存在。这种情况可能发生 引发异常,例如传递带有无效的文件名 字符或字符太多,磁盘失败或丢失,或者是否 调用者没有读取文件的权限。
答案 3 :(得分:0)
在每个字符串之前摆脱@。您当前的目录使用实际的双斜线而不是C:\ Mavro \ MavBridge。使用单斜杠和\或在开头使用@,但不要同时使用。
另外,我强烈建议使用Path.Combine,而不是像这样连接各个部分。