2010-07-08 14 views
8

Sto cercando di salvare il contenuto di una casella di testo in un file di testo utilizzando Visual C#. Io uso il seguente codice:Visual C# - Scrive il contenuto di una casella di testo in un file .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); 
     } 
    } 

ma ho solo la seguente riga di testo nel file di testo:

System.Windows.Forms.TextBox, Text: 

Seguito da solo una breve parte di ciò che era in realtà nella casella di testo, si è conclusa con ' ... '. Perché non scrive l'intero contenuto della casella di testo?

risposta

20

L'uso di TextWriter non è realmente necessario in questo caso.

File.WriteAllText(filename, logfiletextbox.Text) 

è più semplice. Dovresti usare TextWriter per un file che devi tenere aperto per un periodo di tempo più lungo.

+1

Appena aggiunto il parametro 'filename'. Bene, stavo proprio scrivendo la stessa cosa :) – MartinStettner

+0

Sì, mi chiedo sempre perché così pochi sviluppatori sappiano che lo spazio dei nomi 'System.IO' esiste, e ancor meno sanno di perle come quella. – Bobby

+0

Whoops. Fallire da parte mia lì. Grazie! –

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

piccola spiegazione: tw.WriteLine accetta object in modo che non importa che cosa si passa. Internamente chiama .ToString. Se .ToString non viene sostituito, restituisce semplicemente il nome del tipo. .Text è di proprietà con il contenuto di TextBox

+0

Oh che errore ridicolo ... Grazie mille !! – muttley91

+1

contrassegnalo come la tua risposta quindi, per favore. – tobsen

7

Penso che quello che vi serve è:

tw.WriteLine(logfiletextbox.Text); 

se non si dice '.Text' questo è ciò che si ottiene

Speranza che aiuta!

2

Opzioni: Quando si utilizza WriteLine(), si noti che il contenuto salvato nel file è il testo del controllo TextBox, più un ritorno a capo. Quindi, il contenuto del file non corrisponderà esattamente al contenuto del TextBox. Quando ti interesserebbe questo? Se si utilizza il file per rileggere in seguito una proprietà Text di una casella di testo e passare attraverso save-> load-> save-> load ...

Le scelte per conservare tutto il testo (se si using System.IO) :

File. WriteAllText (nome file, textBox.Text)

File. WriteAllLines (nome del file, TextBox. Lines)

Se ti ostini a usare TextWriter, si potrebbe utilizzare la using wrapper per gestire lo smaltimento del flusso, se avete bisogno di usare la logica complessa nel metodo di scrittura.

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

Si consideri che IOExceptions possono essere gettati ogni volta che si tenta di accedere a un file per la lettura o la scrittura. Prendi in considerazione l'idea di catturare una IOException e gestirla nella tua applicazione (mantenere il testo, mostrare all'utente che il testo non può essere salvato, suggerire di scegliere un file diverso, ecc.).

Problemi correlati