2010-07-08 4 views
8

Je tente d'enregistrer le contenu d'une zone de texte dans un fichier texte à l'aide de Visual C#. J'utilise le code suivant:Visual C# - Écrire le contenu d'une zone de texte dans un fichier .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); 
     } 
    } 

mais je ne reçois que la ligne de texte suivante dans le fichier texte:

System.Windows.Forms.TextBox, Text: 

Suivie par une partie seulement peu de ce qui était en fait dans la zone de texte, a pris fin avec ' ... '. Pourquoi n'écrit-il pas tout le contenu de la zone de texte?

Répondre

20

L'utilisation de TextWriter n'est pas vraiment nécessaire dans ce cas.

File.WriteAllText(filename, logfiletextbox.Text) 

est plus simple. Vous utiliseriez TextWriter pour un fichier que vous devez garder ouvert pendant une période plus longue.

+1

Juste ajouté le paramètre 'filename'. Bon point, j'étais sur le point d'écrire la même chose :) – MartinStettner

+0

Ouais, je me demande toujours pourquoi si peu de développeurs savent que l'espace de noms 'System.IO' existe, et encore moins savoir de telles perles comme celle-là. – Bobby

+0

Oups. Échec de ma part là-bas. Merci! –

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

petite explication: tw.WriteLine accepte object il ne se soucie pas échouez vous. En interne, il appelle .ToString. Si .ToString n'est pas redéfini, il renvoie simplement le nom du type. .Text est propriété avec le contenu de TextBox

+0

Oh quelle erreur ridicule ... Merci beaucoup !! – muttley91

+1

marquer comme votre réponse alors, s'il vous plaît. – tobsen

7

Je pense que ce dont vous avez besoin est:

tw.WriteLine(logfiletextbox.Text); 

si vous ne dites pas '.Text' qui est ce que vous obtenez

Hope that helps!

2

Options: Lorsque vous utilisez WriteLine(), notez que le contenu enregistré dans le fichier est le texte de la zone de texte, plus un saut de ligne. Ainsi, le contenu du fichier ne correspondra pas exactement au contenu de la zone de texte. Quand cela vous intéresserait-il? Si vous utilisez le fichier à lire dans une propriété Text d'une zone de texte plus tard, et passez par le save-> load-> save-> charger ...

Vos choix pour conserver tout le texte (si vous using System.IO) :

Fichier. WriteAllText (filename, textBox.Text)

Fichier. WriteAllLines (nom de fichier, textBox. Lines)

Si vous insistez sur l'utilisation TextWriter, vous pouvez utiliser l'emballage using pour gérer l'élimination du flux, si vous avez besoin d'utiliser la logique complexe dans votre méthode d'écriture. Considérer que des exceptions IO peuvent être levées lors d'une tentative d'accès à un fichier en lecture ou en écriture. Pensez à attraper une IOException et à la gérer dans votre application (en gardant le texte, en affichant à l'utilisateur que le texte n'a pas pu être sauvegardé, suggérez de choisir un fichier différent, etc.).

Questions connexes