none
Leer todo el contenido de un archivo RRS feed

  • Pregunta

  • Estoy desarrollando una aplicación para editar texto, que lee un archivo y lo muestra en un textbox(no es nada serio, para aprender).

    Pues tengo 2 dudas: Primero, que al leer un archivo que no sea de texto plano, no se muestra todo en contenido, sino unas letras específicas por cada extensión( al leer un .exe me devuelve esto: MZ�), quiero que haga como en el bloc de notas de windows, que muestra toodo el contenido. El código que estoy usando para leer archivos es este:

      void OpenFile()
            {
                 OpenFileDialog op = new OpenFileDialog();  
                op.CheckFileExists = true;  op.ShowDialog();
               
                if (op.FileName == "") { } else {
                    StreamReader sr = new StreamReader(op.FileName);
                    textBox1.Text = sr.ReadToEnd();                
                    sr.Close();
                    FilePath = op.FileName; }
            }

    La segunda duda es que al leer un archivo de texto plano, si que lee el texto, pero los acentos o otros símbolos los muestra como interrogantes.

    Gracias de antemano.

    domingo, 13 de abril de 2014 13:44

Todas las respuestas

  • Primero, lo de que los caracteres con acentos no se lean bien es problema de que el archivo de texto está grabado con una codificación y lo estás leyendo con otra. Para evitarlo, cuando abras el StreamReader pásale al final un argumento que indique expresamente la codificación en la que se grabó el fichero. Por ejemplo, para leer un archivo grabado en modo Windows-ANSI sobre un Windows de Europa Occidental, usa esto:

    ... new StreamReader(op.FileName, System.Text.Encoding.GetEncoding(1252))

    El parámetro del GetEncoding hay que elegirlo según cómo se haya generado el fichero de texto. En la página del manual de la clase Encoding viene una larga lista que contiene las codificaciones más comunes.

    En cuanto a la otra pregunta, la de los ficheros binarios tales como los .exe, el remedio sería leerlos en binario (por ejemplo, con File.ReadAllBytes), y luego decidir por código cómo quieres visualizar esos caracteres dentro del textbox, ya que no coincidirán con ninguna codificación en particular y por tanto muchos de ellos se verán mal o incluso producirán errores al interpretarlos. Si quieres arriesgarte a usar algún juego de caracteres (creo recordar que el Notepad les aplica el ANSI), puedes hacerlo pasando el binario a través del método GetString de System.Text.Encoding. Pero los resultados en pantalla probablemente serán poco satisfactorios.

    domingo, 13 de abril de 2014 16:57
    Moderador
  • leer un archivo que no sea de texto plano, no se muestra todo en contenido, sino unas letras específicas por cada extensión

    cuando dices que no es texto plano te refieres a que fue grabado con un encoding diferene o a un archivo binario?

    porque puedes usar el

    File.ReadAllText Method (String, Encoding)

    Invalid characters in File.ReadAllText

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 13 de abril de 2014 17:30