2010-09-18 36 views
5

Câu hỏi này đã được trả lời. Tôi đề nghị giải pháp sumit_programmers dưới đây. Hiện tại, tôi đã xóa mã của mình, nghĩ rằng nó khó hiểu hơn là hữu ích. Khi tôi đã phát triển nó một chút nữa, có lẽ tôi sẽ đăng mã của tôi ở đây, với một số ý kiến.Mở tệp trong hộp văn bản có định dạng bằng C#

Bạn cũng có thể quan tâm đến câu trả lời cho câu hỏi Save text from rich text box with C#. Có một câu trả lời nhắc nhở câu trả lời được chấp nhận cho câu hỏi này. Mã nên hoạt động, nhưng nó được viết bởi tôi, vì vậy có thể có một số lỗi hoặc thiếu thông tin.


Cập nhật: Tôi đã cải thiện mã một chút (ít nhất là tôi nghĩ vậy). "Encoding.Default" dường như làm việc với hầu hết các mã hóa phổ biến, như ANSI. Nếu mã hóa là UTF-8 không có dấu thứ tự byte (BOM), có vẻ như "Encoding.Default" không hoạt động. Để biết thêm thông tin, hãy truy cập informit.com/guides. Đây là mã tôi đang sử dụng ngay bây giờ:

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); 
    } 
    } 
} 

Trả lời

15

Có, bạn gặp phải lỗi đó khi bạn đang cố gắng truy cập tệp không thể tải trong Hộp văn bản đa dạng thức. Nếu bạn muốn tải tệp .rtf bạn cần phải thêm dòng này

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

và nếu bạn muốn tải.txt tập tin, bạn cần phải thêm này Mã

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

mẫu:

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

Vâng , Tôi không thấy mã được thêm vào đó. Xin vui lòng thêm nó sau khi bạn mở hộp dilog, tôi sẽ cung cấp cho một mã mẫu, có thể giúp đỡ, xin vui lòng xem mã, nó được chỉnh sửa ngay bây giờ. –

+0

Tôi hiện đã thử mã của bạn. Nó hoạt động tuyệt vời! Cảm ơn rất nhiều!! – matsolof

+0

Niềm vui của tôi, Happy Coding :) –

4

Chỉnh sửa: Ok, nếu bạn muốn mở tệp văn bản thuần túy, hãy quay lại giải pháp gốc của tôi.

Bạn chỉ có thể thay đổi MessageBox.Show vào dòng:

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

Xem doc cho ReadAllText để biết thêm.

Bit try/catch là để tránh bị lỗi ứng dụng của bạn do lỗi chưa được xử lý (đôi khi có thể là cách tốt nhất để làm cho nó bị lỗi, nhưng ngay cả khi đó bạn thường muốn đóng nó trong một phần được kiểm soát cách thức). Đặc biệt là khi làm việc với các tập tin, có một nguy cơ cao rằng họ sẽ không tải vì một lý do để nó có thể có ích để bao quanh mã với một số xử lý lỗi, ví dụ một cái gì đó như thế này:

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); 
} 

Cũ câu trả lời dưới đây

Edit: tôi quên rằng đó là một RichTextBox, vì vậy câu trả lời đầu tiên của tôi là không phù hợp, vì vậy nó có thể là tốt hơn để làm điều này thay vì:

Bạn chỉ có thể thay đổi MessageBox.Show vào dòng:

rtfMain.LoadFile(dlg.FileName); 

Có thể thêm vào try/catch phù hợp để xử lý mọi lỗi khi đọc tệp.

Xem tài liệu cho RichTextBox.LoadFile để có mẫu hoàn chỉnh.

+0

tôi đã cố gắng mã của bạn, nhưng nó tạo ra các thông báo lỗi "định dạng file không hợp lệ." Bởi vì tôi đang sử dụng "dlg.Filter =" Tất cả các tệp (*. *) | *. * | "+" Tệp văn bản (* .txt) | * .txt ";" trong mã của tôi, tôi nghĩ rằng tôi có thể mở bất kỳ tệp nào. Là một người mới bắt đầu C#, tôi có thể sai, mặc dù. – matsolof

+0

Ngoài ra, tôi chưa bao giờ sử dụng try/catch. Tôi nghĩ rằng nó đã làm với hiển thị thông báo lỗi khi cần thiết, nhưng tôi không chắc chắn. Một giải thích sẽ tốt, không chỉ vì lợi ích của tôi mà còn cho những khách truy cập khác vào trang này. – matsolof

+0

@matsolof: Trả lời sửa đổi với câu trả lời cho ý kiến ​​của bạn (để nó có thể được định dạng tốt hơn) –

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

Cảm ơn câu trả lời của bạn! Tôi đã thử mã của bạn. Sau một số thay đổi (viết hoa một số từ, thay đổi fd thành dlg và thay đổi richTextBox1 thành rtfMain), mã được biên dịch. Tuy nhiên, khi tôi cố mở tệp, tệp không mở. Thay vào đó, tôi nhận được một hộp thông báo nói "Định dạng tệp không hợp lệ". Lý do có thể là gì? – matsolof

+0

ya Rich Text Box chỉ tải tệp với phần mở rộng ".rtf" (định dạng văn bản có định dạng - từ phần mở rộng mặc định cho Ms WordPad) ... nếu bạn muốn mở một số phần mở rộng tệp khác chẳng hạn như .txt bạn phải sử dụng lớp FileStream –

Các vấn đề liên quan