2010-09-18 43 views
5

此问题已回答。我建议下面的sumit_programmers解决方案。目前,我已经删除了我的代码,认为它比有用的更令人困惑。当我进一步开发它时,也许我会在这里发布我的代码,并提供一些评论。用C在富文本框中打开文件#

您可能也有兴趣回答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); 
    } 
    } 
} 

回答

15

是的,您在尝试访问无法在Rich Text Box中加载的文件时遇到此错误。如果你想加载.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) 
      { 
      } 
     } 
+0

,我没有看到代码被添加到那里。请在打开dilog框后添加它,我会给出一个示例代码,这可能会有所帮助,请参阅代码,现在编辑它。 – 2010-09-20 09:33:32

+0

我现在试过你的代码。它很棒!非常感谢!! – matsolof 2010-09-21 14:19:16

+0

它是我的荣幸,快乐编码:) – 2010-09-21 14:20:53

4

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

你可以只改变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的文档。

+0

我想你的代码,但它产生的错误信息“无效的文件格式。”因为我正在使用“dlg.Filter =”所有文件(*。*)| *。* |“+”文本文件(* .txt)| * .txt“;”在我的代码中,我认为我应该可以打开任何文件。作为一名C#初学者,我可能是错的,但是。 – matsolof 2010-09-19 00:02:20

+0

另外,我从来没有用过try/catch。我认为它需要时显示错误消息,但我不确定。一个解释是很好的,不仅对我有好处,对其他访问者也是如此。 – matsolof 2010-09-19 00:20:01

+0

@matsolof:回答与您的意见的答案修改(以便它可以格式化更好) – 2010-09-19 08:55:14

2
try 
{ 
openFileDialog fd=new openFileDialog(); 
fd.showDialog(); 
richTextbox1.LoadFile(fd.FileName); 
} 
catch(Exception exc) 
{ 
MessageBox.Show(exc.Message); 
} 
+0

感谢您的回答!我试过你的代码。经过一些改变(大写一些单词,将fd改为dlg并将richTextBox1改为rtfMain),编译代码。但是,当我尝试打开文件时,该文件未打开。相反,我收到了一个消息框,提示“无效的文件格式”。原因可能是什么? – matsolof 2010-09-19 11:58:29

+0

雅富文本框只加载扩展名为“.rtf”的文件(富文本格式 - 对于写字板的默认扩展名)...如果要打开其他文件扩展名(如.txt),则必须使用FileStream类 – 2010-09-20 12:39:40