2010-09-18 77 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