2010-09-18 34 views
5

Esta pregunta ha sido respondida. Recomiendo la solución sumit_programmers a continuación. Por ahora, he eliminado mi código, pensando que es más confuso que útil. Cuando lo haya desarrollado un poco más, quizás publique mi código aquí, con algunos comentarios.Abrir archivo en el cuadro de texto enriquecido con C#

Puede que también esté interesado en la respuesta a la pregunta Save text from rich text box with C#. Hay una respuesta que recuerda la respuesta aceptada a esta pregunta. El código debería funcionar, pero lo escribí yo, por lo que puede haber algunos errores o información faltante.


Actualización: He mejorado el código un poco (al menos eso creo). "Encoding.Default" parece funcionar con las codificaciones más comunes, como ANSI. Si la codificación es UTF-8 sin marca de orden de bytes (BOM), parece que "Encoding.Default" no funciona. Para obtener más información, vaya al informit.com/guides. Aquí está el código que estoy usando en este 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); 
    } 
    } 
} 

Respuesta

15

Sí, está recibiendo ese error porque está intentando acceder al archivo que no se puede cargar en el cuadro de texto enriquecido. Si desea cargar un archivo .rtf, debe agregar esta línea

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

y si desea cargar.txt, es necesario agregar este Código

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

muestra:

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

Bien , No veo el código agregado allí. Por favor, agréguelo después de abrir el cuadro de diálogo. Le daré un código de muestra que podría ayudar, vea el código, está editado ahora. –

+0

Ahora probé tu código. ¡Funciona genial! ¡¡Muchas gracias!! – matsolof

+0

Es un placer, Happy Coding :) –

4

Editar: Ok, si desea abrir un archivo de texto plano, volver a mi solución original.

Se podía cambiar el MessageBox.Show a la línea:

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

Véase el doc para ReadAllText para obtener más información.

El bit de prueba/captura consiste en evitar que la aplicación se bloquee debido a errores no controlados (a veces puede ser mejor dejarlo que se cuelgue, pero incluso entonces generalmente se desea cerrarlo de una manera controlada manera). Especialmente cuando se trabaja con archivos, hay un alto riesgo de que van a no se pueden cargar por alguna razón, por lo que podría ser útil para rodear el código con un poco de control de errores, por ejemplo, algo como esto:

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

respuesta Viejo a continuación

Editar: Olvidé que es un RichTextBox, así que mi primera respuesta no era tan adecuado, por lo que es probable que sea mejor hacer esto en su lugar:

se podía cambiar el MessageBox.Show a la línea:

rtfMain.LoadFile(dlg.FileName); 

Probablemente agregue el try/catch adecuado para manejar cualquier error al leer el archivo.

Consulte la documentación para RichTextBox.LoadFile para obtener una muestra completa.

+0

Probé su código, pero genera el mensaje de error "formato de archivo no válido". Porque estoy usando "dlg.Filter =" Todos los archivos (*. *) | *. * | "+" Archivos de texto (* .txt) | * .txt ";" en mi código, creo que debería poder abrir cualquier archivo. Siendo un principiante de C#, puedo estar equivocado, sin embargo. – matsolof

+0

Además, nunca he usado try/catch. Creo que tiene que ver con la visualización de mensajes de error cuando es necesario, pero no estoy seguro. Una explicación sería buena, no solo para mi beneficio sino también para otros visitantes de esta página. – matsolof

+0

@matsolof: respuesta modificada con respuestas a sus comentarios (para que se pueda formatear mejor) –

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

¡Gracias por tu respuesta! He intentado tu código. Después de algunos cambios (capitalizar algunas palabras, cambiar fd a dlg y cambiar richTextBox1 a rtfMain), compiló el código. Sin embargo, cuando intenté abrir un archivo, el archivo no se abrió. En cambio, recibí un mensaje que decía "Formato de archivo inválido". ¿Cuál puede ser la razón? – matsolof

+0

ya Rich Text Box solo carga el archivo con la extensión ".rtf" (formato de texto enriquecido-de la extensión predeterminada para Ms WordPad) ... si desea abrir alguna otra extensión de archivo como .txt debe usar FileStream clase –

Cuestiones relacionadas