2010-07-08 13 views
8

Próbuję zapisać zawartość pola tekstowego do pliku tekstowego za pomocą programu Visual C#. Używam następujący kod:Visual C# - Zapisywanie zawartości pola tekstowego do pliku .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); 
     } 
    } 

ale mam tylko następującą linię tekstu w pliku tekstowego:

System.Windows.Forms.TextBox, Text: 

Obserwowani przez jedynie krótki części, co było faktycznie w polu tekstowym, zakończony " ... ". Dlaczego nie pisze całej zawartości pola tekstowego?

Odpowiedz

20

Używanie TextWriter nie jest w tym przypadku konieczne.

File.WriteAllText(filename, logfiletextbox.Text) 

jest prostszy. Używałbyś TextWriter dla pliku, który musisz zachować przez dłuższy czas.

+1

Właśnie dodano parametr 'filename'. Dobra sprawa, chciałem napisać to samo :) – MartinStettner

+0

Tak, zawsze zastanawiam się, dlaczego tak niewielu programistów wie, że istnieje przestrzeń nazw System.IO, a jeszcze mniej zna takie perły jak ta. – Bobby

+0

Whoops. Niepowodzenie z mojej strony. Dzięki! –

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

małe wyjaśnienie: tw.WriteLine akceptuje object więc nie obchodzi mnie, co pan przekazać. Wewnętrznie wywołuje .ToString. Jeśli .ToString nie zostanie zmienione, po prostu zwraca nazwę typu. .Text jest nieruchomość z treścią TextBox

+0

Och, co za niedorzeczny błąd ... Wielkie dzięki! – muttley91

+1

oznacz to jako odpowiedź, proszę. – tobsen

7

myślę, czego potrzebujesz to:

tw.WriteLine(logfiletextbox.Text); 

jeśli nie powiedzieć „.text” to, co dostajesz

nadzieję, że pomoże!

2

Opcje: Podczas korzystania WriteLine(), trzeba pamiętać, że zawartość zapisana w pliku jest tekst TextBox, plus nowej linii. Tak więc zawartość pliku nie będzie dokładnie odpowiadać zawartości TextBox. Kiedy byś się tym przejmował? Jeśli użyjesz tego pliku do późniejszego odczytania we właściwości Text pola tekstowego, a następnie przejdziesz przez zapisanie> load-> save-> load ...

Twoje wybory, aby zachować cały tekst (jeśli jesteś using System.IO) :

Plik. WriteAllText (filename, textBox.Text)

Plik. WriteAllLines (filename, tekstowym. Lines)

Jeśli nalegać na użyciu TextWriter, można użyć using otoki do obsługi utylizacji Stream, jeśli trzeba użyć złożonej logiki w sposobie zapisu.

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

Należy wziąć pod uwagę fakt, że podczas próby uzyskania dostępu do pliku do odczytu lub zapisu mogą wystąpić problemy z wyświetlaniem wyrazów. Rozważ uchwycenie wyjątku IOException i obsługę go w aplikacji (zachowanie tekstu, wyświetlenie użytkownikowi, że tekst nie może zostać zapisany, sugerowanie wyboru innego pliku itp.).

Powiązane problemy