使用OnSelectedIndexChanged自动打开txt文件

时间:2012-05-15 14:51:06

标签: c# .net-3.5

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

4 个答案:

答案 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,而不是像这样连接各个部分。