使用 OnSelectedIndexChanged 自动打开 txt 文件
本文关键字:txt 文件 OnSelectedIndexChanged 使用 | 更新日期: 2023-09-27 18:34:18
我正在尝试做的是使用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");
}
}
只是为了好玩,让我们尝试一些东西。首先,替换以下行:
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));
嗯,一个问题来自你有:
@"C:''Mavro''MavBridge''" + selectedPath + "'' " + "Comment" + ".txt"
由于您使用的是逐字字符串(开头的 @(,因此不需要放置双斜杠。
对于其余部分,请确保您的文件存在。
后来编辑:我也不确定你是否匆忙复制/粘贴或类似的东西,但你真的把catch
块放在try
里了吗?
1(你看到的错误是什么?
2(你确定文件存在吗?
3(你肯定你的代码创建的路径是你期望的路径吗?
4(你为什么要睡觉?
5(为什么不直接使用File.ReadAllText?
6( 如果代码以无权访问文件的权限运行,则 File.Exists 将返回 false,即使该文件确实存在。运行代码的用户是否具有权限?
如果调用方具有所需的权限并且路径包含 现有文件的名称;否则,为假。此方法还返回 如果路径为 null、无效路径或长度为零的字符串,则为 false。如果 调用方没有足够的权限来读取指定的 文件,不会引发异常,并且该方法返回 false,无论 路径的存在。
和
如果尝试时发生任何错误,则 Exists 方法返回 false。 确定指定的文件是否存在。这可能发生在以下情况下 引发异常,例如传递具有无效的文件名 字符或字符过多、磁盘故障或丢失,或者 调用方没有读取文件的权限。
去掉每个字符串前的 @。您的目录当前使用实际的双斜杠而不是 C:''Mavro''MavBridge。在开头使用 '' 的单斜杠或 @,但不要同时使用两者。
另外,我强烈建议使用Path.Combing,而不是像那样将各个部分连接在一起。