Запись в текстовый файл

Рейтинг: 1Ответов: 3Опубликовано: 26.04.2015

Записываю получаемые значение href в текстовый файл. Месседж бокс их показывает корректно все до одного. Но в файл записывается только последнее значение и все. Я добавил Environment.NewLine, но это ничего не поменяло.

StreamWriter sw = new StreamWriter(@"C:\\Test.txt");

    foreach (var node in nodes)
    {
    MessageBox.Show(node.Attributes["href"].Value);
    sw.WriteLine(node.Attributes["href"].Value + Environment.NewLine);
    sw.Close();
    }

Ответы

▲ 2Принят

Вы в цикле закрываете поток. По идее, в файл должно попадать только 1 значение, а потом исключение должно появиться

sw.Close();

Вот такой код работает

class Program
{
    static void Main(string[] args)
    {
        StreamWriter sw = new StreamWriter("Test.txt");

        string[] st = new string[] {"fff", "aaa", "kkk"};

        foreach (var node in st)
        {
            MessageBox.Show(node);
            sw.WriteLine(node + Environment.NewLine);
            //sw.Close();
        }

        sw.Close();

        Console.ReadLine();
    }
}

В конце поток обязательно надо закрыть. И еще: если вы используете дословную строку (начинается с @), то писать так

StreamWriter sw = new StreamWriter(@"D:\\Test.txt");

не обязательно. можно просто

StreamWriter sw = new StreamWriter(@"D:\Test.txt");

один "\" вместо "\\"

▲ 4

Мне больше нравится такой код:

using (var sw = File.AppendText(@"C:\Test.txt"))
{
      sw.WriteLine("строка с данными");
}
▲ 2

А зачем вы поток после каждой итерации закрываете? У вас не просто записвается только одно значение, а еще и вываливается исключение после обращения к уже освобожденному поток. Перенесите sw.Close() за пределы цикла и будет вам счастье. Плюс еще уберите NewLine, тем самым вы только добавляете лишний разрыв строки. Ну и еще крайне не советовал бы писать Close без try/finally или using