Вопрос

У меня есть проблема с SaveFileDialog по какой-то причине. Все, что я хочу сделать, это извлекать данные из линейки текстовой коробки по строке и запишите ее в текстовый файл, а затем сохраните этот текстовый файл на рабочий стол. Первый бит кода работает нормально (хотя это не сохраняет на рабочий стол). Второй код кода - это то, что я хочу использовать, но когда он создает текстовый файл, текстовый файл пуст. Что я сделал не так во второй бит кода?

Этот код работает, но он не сохраняет на рабочем столе, и он не так хорош, как второй код.

//When the Save button is clicked the contents of the text box will be written to a text file.
private void saveButton_Click(object sender, EventArgs e)
{
    int textBoxLines = textBox.Lines.Count();
    if (File.Exists(saveFile))
    {
        result = MessageBox.Show("The file " + saveFile + " already exists.\r\nDo you want to replace it?", "File Already Exists!", MessageBoxButtons.YesNo);

        if (result == DialogResult.Yes)
        {
            TextWriter tw1 = new StreamWriter(saveFile);
            for (int i = 0; i < textBoxLines; i++)
            {
                tw1.WriteLine(textBox.Lines.GetValue(i));
            }

            tw1.Close();

        }

        if (result == DialogResult.No)
        {
            MessageBox.Show("Please move or rename existing " + saveFile + "\r\nBefore attempting to save again.", "Message");
        }
    }

    else
    {
        TextWriter tw2 = new StreamWriter(saveFile);
        for (int i = 0; i < textBoxLines; i++)
        {
            tw2.WriteLine(textBox.Lines.GetValue(i));
        }

        tw2.Close();

    }

}

Этот код не работает, но это то, что я хочу использовать.

//When the Save button is clicked the contents of the text box will be written to a text file.
private void saveButton_Click(object sender, EventArgs e)
{
    int textBoxLines = textBox.Lines.Count();

    Stream saveStream;
    SaveFileDialog saveDialog = new SaveFileDialog();
    saveDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    saveDialog.FilterIndex = 2;
    saveDialog.RestoreDirectory = true;
    saveDialog.FileName = (saveFile);
    saveDialog.InitialDirectory = (Environment.GetFolderPath(Environment.SpecialFolder.Desktop));

    if (saveDialog.ShowDialog() == DialogResult.OK)
    {
        if ((saveStream = saveDialog.OpenFile()) != null)
        {
            StreamWriter tw = new StreamWriter(saveStream);
            for (int i = 0; i < textBoxLines; i++)
            {
                tw.WriteLine(textBox.Lines.GetValue(i));
            }

            saveStream.Close();
        }
    }
}
Это было полезно?

Решение

У тебя нет tw.Close() После написания содержимого. Буфер не будет покрасен.

Другие советы

Как отметил Крисф, вы никогда не закрываете парограф. Однако как лучшая практика, вы должны иметь using Блоки, чтобы закрыть / распоряжаться этим для вас.

//When the Save button is clicked the contents of the text box will be written to a text file.
private void saveButton_Click(object sender, EventArgs e)
{
    int textBoxLines = textBox.Lines.Count();

    SaveFileDialog saveDialog = new SaveFileDialog();
    saveDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    saveDialog.FilterIndex = 2;
    saveDialog.RestoreDirectory = true;
    saveDialog.FileName = (saveFile);
    saveDialog.InitialDirectory = (Environment.GetFolderPath(Environment.SpecialFolder.Desktop));

    if (saveDialog.ShowDialog() == DialogResult.OK)
    {
        using (Stream savestream = saveFialog.OpenFile())
        {

            if (saveStream != null)
            {
                using(StreamWriter tw = new StreamWriter(saveStream))
                {

                    for (int i = 0; i < textBoxLines; i++)
                    {
                        tw.WriteLine(textBox.Lines.GetValue(i));
                    }
                }
            }
        }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top