C# Включение Streamwriter кнопкой - PullRequest
0 голосов
/ 16 января 2020

Я хотел бы создать приложение, в котором я мог бы создать файл, записать что-нибудь в него, нажав кнопку, а затем закрыть этот файл, нажав другую кнопку. Проблема в том, что когда я объявил объект Streamwrtier в одной кнопке, я не смог вызвать метод закрытия файла из второй кнопки, потому что у меня появилась такая ошибка: имя «файл» не существует в текущем контексте . Когда я запускаю Streamwriter за пределами метода кнопки, проблема исчезает, но затем создается файл, прежде чем я нажму кнопку. Вы знаете, как я мог преодолеть эту проблему?

    public void button1_Click(object sender, EventArgs e)
    {
        button1.Visible = false;
        button2.Visible = true;
        StreamWriter file = new StreamWriter("test.txt");
        file.WriteLine(value.ToString());

    }
    private void button2_Click(object sender, EventArgs e)
    {
        button1.Visible = true;
        button2.Visible = false;
        file.Close();
    }

1 Ответ

1 голос
/ 16 января 2020

Вот базовое c исправление:

private StreamWriter file = null;
public void button1_Click(object sender, EventArgs e)
{
    button1.Visible = false;
    button2.Visible = true;
    if (file == null)
        file = new StreamWriter("test.txt");
    file.WriteLine(value.ToString());
}
private void button2_Click(object sender, EventArgs e)
{
    button1.Visible = true;
    button2.Visible = false;
    if (file is object) 
        file.Close();
}

Но на самом деле в большинстве случаев не рекомендуется держать файл открытым. Как правило, вы хотите что-то более похожее на это, которое обрабатывает открытие и закрытие всех необходимых потоков в одном go и сохраняет файл открытым только в течение минимально необходимой продолжительности:

public void button1_Click(object sender, EventArgs e)
{
    File.AppendAllText("test.txt", value.ToString());
}

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

...