0

我要做的是使用 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

4 回答 4

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));
于 2012-05-16T18:03:14.517 回答
2

好吧,一个问题来自您拥有的事实:

@"C:\\Mavro\\MavBridge\\" + selectedPath + "\\ " + "Comment" + ".txt"

由于您使用的是逐字字符串(开头的@),因此您不需要添加双斜杠。

其余的,请确保您的文件存在。

稍后编辑:我也不确定你是否匆忙复制/粘贴或类似的东西,但你真的把catch放在里面try吗?

于 2012-05-15T14:56:41.900 回答
1

1)你看到的错误是什么?

2)您确定该文件存在吗?

3)您确定您的代码创建的路径是您期望的路径吗?

4)你为什么要睡线程?

5) 为什么不只使用File.ReadAllText

6)如果代码以无权访问文件的权限运行,即使文件确实存在,File.Exists也会返回 false。您的代码运行的用户是否有权限?

如果调用者具有所需的权限并且路径包含现有文件的名称,则为 true;否则为假。如果 path 为 null、无效路径或长度为零的字符串,此方法也会返回 false。如果调用者没有足够的权限来读取指定的文件,则不抛出异常,并且无论路径是否存在,该方法都返回 false。

如果在尝试确定指定文件是否存在时发生任何错误,Exists 方法将返回 false。这可能发生在引发异常的情况下,例如传递包含无效字符或过多字符的文件名、磁盘故障或丢失,或者调用者没有读取文件的权限。

于 2012-05-15T14:57:22.623 回答
0

在每个字符串之前去掉 @ 。您当前的目录使用实际的双斜杠而不是 C:\Mavro\MavBridge。在开头使用带有 \ 的单斜杠或使用 @,但不要同时使用两者。

另外,我强烈建议使用 Path.Combine 而不是像那样将片段连接在一起。

于 2012-05-15T14:59:31.460 回答