2010-07-08 18 views
8

Estoy tratando de guardar el contenido de un cuadro de texto en un archivo de texto con Visual C#. Yo uso el siguiente código:Visual C# - Escribir contenidos de un cuadro de texto en un archivo .txt

private void savelog_Click(object sender, EventArgs e) 
    { 
     if (folderBrowserDialog3save.ShowDialog() == DialogResult.OK) 
     { 
      // create a writer and open the file 
      TextWriter tw = new StreamWriter(folderBrowserDialog3save.SelectedPath + "logfile1.txt"); 
      // write a line of text to the file 
      tw.WriteLine(logfiletextbox); 
      // close the stream 
      tw.Close(); 
      MessageBox.Show("Saved to " + folderBrowserDialog3save.SelectedPath + "\\logfile.txt", "Saved Log File", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } 
    } 

pero solo me dan la siguiente línea de texto en el archivo de texto:

System.Windows.Forms.TextBox, Text: 

contener sólo una porción corta de lo que era en realidad en el cuadro de texto, terminó con ' ... '. ¿Por qué no escribe todo el contenido del cuadro de texto?

Respuesta

20

El uso del TextWriter no es realmente necesario en este caso.

File.WriteAllText(filename, logfiletextbox.Text) 

es más simple. Utilizaría TextWriter para un archivo que necesita mantener abierto durante un período de tiempo más largo.

+1

Acaba de agregar el parámetro 'filename'. Buen punto, estaba a punto de escribir lo mismo :) – MartinStettner

+0

Sí, siempre me pregunto por qué tan pocos desarrolladores saben que el espacio de nombres 'System.IO' existe, y aún menos saben de perlas como esa. – Bobby

+0

Whoops. Fracasar por mi parte allí. ¡Gracias! –

8
private void savelog_Click(object sender, EventArgs e) 
    { 
     if (folderBrowserDialog3save.ShowDialog() == DialogResult.OK) 
     { 
      // create a writer and open the file 
      TextWriter tw = new StreamWriter(folderBrowserDialog3save.SelectedPath + "logfile1.txt"); 
      // write a line of text to the file 
      tw.WriteLine(logfiletextbox.Text); 
      // close the stream 
      tw.Close(); 
      MessageBox.Show("Saved to " + folderBrowserDialog3save.SelectedPath + "\\logfile.txt", "Saved Log File", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } 
    } 

pequeña explicación: tw.WriteLine acepta object por lo que no le importa lo qué pasa. Internamente llama al .ToString. Si .ToString no se anula, simplemente devuelve el nombre del tipo. .Text es propiedad con contenido de TextBox

+0

¡Qué error tan ridículo ... Muchas gracias! – muttley91

+1

marque esto como su respuesta, por favor. – tobsen

7

Creo que lo que necesita es:

tw.WriteLine(logfiletextbox.Text); 

si usted no dice '.Texto' que es lo que obtienes

Espero que ayude!

2

Opciones: Al utilizar WriteLine(), cuenta que el contenido guardado en el archivo es el texto del TextBox, además de una nueva línea. Por lo tanto, el contenido del archivo no coincidirá exactamente con el contenido del TextBox. ¿Cuándo te importaría esto? Si utiliza el archivo para volver a leer en una propiedad de texto de un cuadro de texto más adelante, y vaya a la opción guardar-> cargar-> guardar-> cargar ...

Sus opciones para conservar todo el texto (si using System.IO) :

Archivo. WriteAllText (nombre de archivo, textBox.Text)

Archivo. WriteAllLines (nombre de archivo, cuadro de texto. Lines)

Si usted insiste en el uso de TextWriter, se podría utilizar el contenedor using para manejar la eliminación de la corriente, si es necesario utilizar una lógica compleja en su método de escritura.

using(TextWriter tw = new ...) 
{ 
    tw.Write(textBox.Text); 
} 

Considere que se pueden producir IOExceptions cada vez que se intenta acceder a un archivo para leer o escribir. Considere capturar una IOException y manejarla en su aplicación (manteniendo el texto, mostrando al usuario que el texto no se pudo guardar, sugiera elegir un archivo diferente, etc.).

Cuestiones relacionadas