2010-09-18 4 views
5

Questa domanda ha avuto risposta. Raccomando la soluzione sumit_programmers di seguito. Per ora, ho rimosso il mio codice, pensando che sia più confuso che utile. Quando avrò sviluppato un po 'di più, forse posterò il mio codice qui, con alcuni commenti.Apri il file nella casella di testo RT con C#

Potrebbe anche interessarti la risposta alla domanda Save text from rich text box with C#. C'è una risposta che ricorda la risposta accettata a questa domanda. Il codice dovrebbe funzionare, ma è stato scritto da me, quindi potrebbero esserci alcuni errori o informazioni mancanti.


Aggiornamento: Ho migliorato il codice un po '(almeno lo penso). "Encoding.Default" sembra funzionare con le codifiche più comuni, come ANSI. Se la codifica è UTF-8 senza byte order mark (BOM), sembra che "Encoding.Default" non funzioni, comunque. Per ulteriori informazioni, vai a informit.com/guides. Ecco il codice che sto utilizzando in questo momento:

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

risposta

15

Sì, si sta ricevendo quell'errore mentre si sta tentando di accedere al file che non può essere caricato in Rich Text Box. Se si desidera caricare un file .rtf è necessario aggiungere questa riga

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

e se si desidera caricare.txt file, è necessario aggiungere questo codice

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

Esempio:

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

Well , Non vedo il codice aggiunto qui. Si prega di aggiungerlo dopo aver aperto la casella dilog, darò un codice di esempio, che potrebbe aiutare, si prega di vedere il codice, è ora modificato. –

+0

Ora ho provato il tuo codice. Funziona alla grande! Molte grazie!! – matsolof

+0

È un piacere, Happy Coding :) –

4

Edit: Ok, se si desidera aprire un file di testo, tornare alla mia soluzione originale.

Si potrebbe semplicemente cambiare la MessageBox.Show alla linea:

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

si veda la documentazione per ReadAllText per maggiori informazioni.

Il bit try/catch è quello di evitare che il crollo applicazione a causa di errori non gestiti (a volte potrebbe essere la cosa migliore da fare per lasciare che si pianta, ma anche in questo caso di solito si vuole chiuderlo in maniera un po controllata maniera). Specialmente quando si lavora con i file, c'è un alto rischio che faranno non riescono a caricare per qualche motivo quindi potrebbe essere utile per circondare il codice con un po 'la gestione degli errori, per esempio qualcosa di simile:

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

Vecchio risposta sotto

Edit: ho dimenticato che si tratta di un RichTextBox, quindi la mia prima risposta non era adatto, quindi è probabilmente meglio fare questo, invece:

si potrebbe semplicemente cambiare la MessageBox.Show alla linea:

rtfMain.LoadFile(dlg.FileName); 

Probabilmente aggiungere try/catch appropriato per gestire eventuali errori nella lettura del file.

Vedere la documentazione per RichTextBox.LoadFile per un esempio completo.

+0

ho provato il codice, ma genera il messaggio di errore "formato di file non valido." Perché sto usando "dlg.Filter =" Tutti i file (*. *) | *. * | "+" File di testo (* .txt) | * .txt ";" nel mio codice, penso che dovrei essere in grado di aprire qualsiasi file. Essendo un principiante C#, potrei sbagliarmi, però. – matsolof

+0

Inoltre, non ho mai provato try/catch. Penso che abbia a che fare con la visualizzazione dei messaggi di errore quando necessario, ma non ne sono sicuro. Una spiegazione sarebbe buona, non solo per il mio beneficio ma per gli altri visitatori di questa pagina. – matsolof

+0

@matsolof: risposta modificata con le risposte ai vostri commenti (in modo che possa essere formattata meglio) –

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

Grazie per la tua risposta! Ho provato il tuo codice. Dopo alcune modifiche (capitalizzando alcune parole, cambiando fd in dlg e cambiando richTextBox1 in rtfMain), il codice è stato compilato. Quando ho provato ad aprire un file, però, il file non si è aperto. Invece, ho ricevuto una finestra di messaggio che diceva "Formato file non valido". Quale potrebbe essere la ragione? – matsolof

+0

ya Rich Text Box carica solo file con estensione ".rtf" (formato rich text, dall'estensione predefinita per Ms WordPad) ... se vuoi aprire qualche altra estensione di file come .txt devi usare la classe FileStream –