【问题标题】:Open file in rich text box with C#使用 C# 在富文本框中打开文件
【发布时间】:2010-09-18 20:49:45
【问题描述】:

这个问题已经回答了。我在下面推荐 sumit_programmers 解决方案。现在,我已经删除了我的代码,认为它比有用更令人困惑。当我进一步开发它时,也许我会在这里发布我的代码,以及一些 cmets。

您可能还对问题Save text from rich text box with C# 的答案感兴趣。有一个答案让人想起这个问题的公认答案。代码应该可以工作,但它是我写的,所以可能有一些错误或缺少信息。


更新:我对代码做了一些改进(至少我是这么认为的)。 “Encoding.Default”似乎适用于最常见的编码,如 ANSI。如果编码是没有字节顺序标记 (BOM) 的 UTF-8,那么“Encoding.Default”似乎不起作用。欲了解更多信息,请转至informit.com/guides。这是我现在使用的代码:

private void fileOpen_Click(object sender, EventArgs e)
{
  using (OpenFileDialog dlgOpen = new OpenFileDialog())
  {
    try
    {
      // Available file extensions
      dlgOpen.Filter = "All files(*.*)|*.*";
      // Initial directory
      dlgOpen.InitialDirectory = "D:";
      // OpenFileDialog title
      dlgOpen.Title = "Open";
      // Show OpenFileDialog box
      if (dlgOpen.ShowDialog() == DialogResult.OK)
      {
        // Create new StreamReader
        StreamReader sr = new StreamReader(dlgOpen.FileName, Encoding.Default);
        // Get all text from the file
        string str = sr.ReadToEnd();
        // Close the StreamReader
        sr.Close();
        // Show the text in the rich textbox rtbMain
        rtbMain.Text = str;
      }
    }
    catch (Exception errorMsg)
    {
      MessageBox.Show(errorMsg.Message);
    }
  }
}

【问题讨论】:

    标签: c# winforms file-io richtextbox


    【解决方案1】:

    是的,您在尝试访问无法在富文本框中加载的文件时遇到该错误。如果要加载 .rtf 文件,则需要添加此行

    richTextBox1.LoadFile(dlg.FileName, RichTextBoxStreamType.RichText);
    

    如果你想加载 .txt 文件,你需要添加这个

    richTextBox1.LoadFile(dlg.FileName, RichTextBoxStreamType.PlainText);
    

    示例代码:

     using (OpenFileDialog ofd = new OpenFileDialog())
            {
                try
                {
                    ofd.Filter = "Text files (*.txt)|*.txt|RTF files (*.rtf)|*.rtf";
                    if (ofd.ShowDialog() == DialogResult.OK)
                    {
                        if (Path.GetExtension(ofd.FileName) == ".rtf")
                        {
                            richTextBox1.LoadFile(ofd.FileName, RichTextBoxStreamType.RichText);
                        }
                        if (Path.GetExtension(ofd.FileName) == ".txt")
                        {
                            richTextBox1.LoadFile(ofd.FileName, RichTextBoxStreamType.PlainText);
                        }
    
                    }
                }
                catch (Exception ex)
                {
                }
            }
    

    【讨论】:

    • 好吧,我没有看到那里添加了代码。请在打开对话框后添加它,我将给出一个示例代码,这可能会有所帮助,请查看代码,它现在已编辑。
    • 这是我的荣幸,快乐编码:)
    • 我认为你从经验丰富的程序员那里得到的回应,比如 sumit_programmer,在这个网站上真是太棒了!我怎么强调都不过分。如果您发布问题,您似乎可以依靠快速准确的答案。你们应该得到某种奖励。
    • 非常感谢 Prateek,但事实上 Stackoverflow 充满了才华横溢的程序员,我只是其中的一小部分,希望向各位专家学习并提高我的编程技能。路漫漫其修远兮,一路前行:)
    • 不能更同意上面的 cmets。似乎如果您在 stackoverflow.com 上发布问题,您可以依靠快速准确的响应并学到一些东西。如果您碰巧对某种计算机语言或其他计算机语言或一般计算机有所了解,您也可以通过回答问题来提供帮助。作为一名教师,我觉得教书和学书都很有意义。
    【解决方案2】:

    编辑:好的,如果你想打开一个纯文本文件,回到我原来的解决方案。

    您可以将MessageBox.Show 更改为以下行:

    rtfMain.Text = File.ReadAllText(dlg.FileName);
    

    有关详细信息,请参阅 ReadAllText 的文档。

    try/catch 位是为了避免您的应用由于未处理的错误而崩溃(有时最好让它崩溃,但即便如此,您通常也希望以某种可控的方式关闭它)。尤其是在处理文件时,由于某种原因无法加载它们的风险很高,因此在代码周围加上一些错误处理可能很有用,例如:

    try
    {
        rtfMain.Text = File.ReadAllText(dlg.FileName);
    }
    catch(Exception ex) // should try to avoid catching generic Exception here and use a more specialized one
    {
         MessageBox.Show("Failed to open file. Error: " + ex.Message);
    }
    

    下面的旧答案

    编辑:我忘了它是一个 RichTextBox,所以我的第一个答案不太合适,所以这样做可能会更好:

    您可以将MessageBox.Show 更改为以下行:

    rtfMain.LoadFile(dlg.FileName);
    

    可能会添加合适的try/catch 来处理读取文件时出现的任何错误。

    有关完整示例,请参阅RichTextBox.LoadFile 的文档。

    【讨论】:

    • 我尝试了您的代码,但它会生成错误消息“文件格式无效”。因为我使用的是 "dlg.Filter = "All Files (.)|*.*|" + "Text Files (.txt)|.txt";"在我的代码中,我想我应该能够打开任何文件。不过,作为 C# 初学者,我可能错了。
    • 另外,我从未使用过 try/catch。我认为这与在需要时显示错误消息有关,但我不确定。解释会很好,不仅有利于我,也有利于该页面的其他访问者。
    • @matsolof: 用你的 cmets 的答案修正了答案(以便更好地格式化)
    • 感谢您的努力!我已经尝试了您的新代码,但收到错误消息“当前上下文中不存在名称‘文件’和名称‘dlg’”。可能是什么原因?另外,我已经在你建议的 msdn 上尝试过这个例子,但我无法让它工作。作为一个 C# 初学者,我很可能犯了一些愚蠢的错误,比如没有更改必须更改的变量名。当我对 C# 有了更多了解时,msdn 上的示例代码很可能会非常有用。但现在,它的作用比帮助更大。
    • @matsolof:您需要为正在调用的调用导入正确的库,因此您需要在文件顶部添加一个using System.IO;,以便它找到File。不过,缺少的dlg 让我感到困惑,因为那是您在代码示例中声明的变量。我的答案中的代码应该在您的代码中的 if 之后。
    【解决方案3】:
    try
    {
     openFileDialog fd=new openFileDialog();
     fd.showDialog();
     richTextbox1.LoadFile(fd.FileName);
    }
    catch(Exception exc)
    {
     MessageBox.Show(exc.Message);
    }
    

    【讨论】:

    • 感谢您的回答!我试过你的代码。经过一些更改(大写一些单词,将 fd 更改为 dlg 并将richTextBox1 更改为 rtfMain),代码编译。但是,当我试图打开一个文件时,该文件没有打开。相反,我收到一个消息框,上面写着“文件格式无效”。可能是什么原因?
    • ya 富文本框仅加载扩展名为“.rtf”的文件(富文本格式 - 来自写字板女士的默认扩展名)...如果您想打开其他文件扩展名,例如 .txt,您必须使用 FileStream 类
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2016-11-23
    • 2012-03-18
    • 2012-04-08
    相关资源
    最近更新 更多