C# 使用OnSelectedIndexChanged自动打开txt文件

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(@

我试图做的是使用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");
        }
    }

嗯,一个问题来自这样一个事实:

@“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仅显示结果。请使用调试器查看发生的情况。确保文件未被删除