Visual С# - написать содержимое TextBox на a.txt файл

Я пытаюсь сохранить содержимое текстового поля в текстовый файл с помощью C#. Я использую следующий код:

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

но я получаю только следующую строку текста в textfile:

System.Windows.Forms.TextBox, Text: 

затем следует только короткая часть того, что было на самом деле в текстовом поле, заканчивалось на '...'. Почему он не записывает все содержимое текстового поля?

4 ответов


в этом случае использование TextWriter не обязательно.

File.WriteAllText(filename, logfiletextbox.Text) 

проще. Вы бы использовали TextWriter для файла, который вам нужно держать открытым в течение более длительного периода времени.


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

небольшое пояснение: tw.WriteLine принимает object поэтому ему все равно, что вы проходите. Внутренне он вызывает .ToString. Если .ToString не исключен, он просто возвращает имя типа. .Text является собственностью с содержанием TextBox


Я думаю, что вам нужно, это:

tw.WriteLine(logfiletextbox.Text);

если ты не скажешь '.Текст ' вот что вы получите

надеюсь, что это поможет!


параметры: При использовании WriteLine() обратите внимание, что контент сохранен в файл текст в TextBox, плюс перевод строки. Таким образом, содержимое файла не будет точно соответствовать содержимому текстового поля. Когда это тебя волнует? Если вы используете файл для чтения в текстовом свойстве текстового поля позже, и перейдите через save->load->save->load...

ваш выбор, чтобы сохранить весь текст (если вы using System.IO):

.WriteAllText( имя файла, текстовое поле.Текст) .WriteAllLines (имя файла, текстовое поле.строки )

если вы настаиваете на использовании TextWriter, вы можете использовать using обертка для обработки удаления потока, если вам нужно использовать сложную логику в вашем методе записи.

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

считайте, что IOExceptions может быть брошен при попытке доступа к файлу для чтения или записи. Рассмотрите возможность захвата IOException и обработки его в приложении (сохраняя текст, показывая пользователю, что текст не может быть сохранен, предложите выбрать другой файл и т. д.).