使用 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");
        }
    }

使用 OnSelectedIndexChanged 自动打开 txt 文件

只是为了好玩,让我们尝试一些东西。首先,替换以下行:

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,而不是像那样将各个部分连接在一起。