StreamWriter все строки в файл

C# У меня есть консольное приложение, которое читает и записывает список получения / установки сведений о персоне. Он работает правильно, пока я не попытаюсь записать его в текстовый файл. Может кто-нибудь сказать мне, почему это записывает в мой текстовый файл последнюю строку подробностей "Персона", а не весь список?

        loadData();

        Console.WriteLine("All People");
        //1st query - just select all people
        var queryAllPeople = from person in people  select person;

        foreach (Person p in queryAllPeople)
        {
            using (StreamWriter writer = new StreamWriter("people.txt"))
            {

                writer.WriteLine(p);

            }
            Console.WriteLine(p);
        }

        Console.ReadLine();

4 ответа

Решение

Поместите foreach внутри оператора using. Вы перезаписываете файл на каждой итерации цикла

Вы пишете новый файл с тем же именем для каждой итерации. Вы хотите создать StreamWriter вне цикла вместо этого:

using (StreamWriter writer = new StreamWriter("people.txt"))
{
    foreach (Person p in queryAllPeople)
    {
        writer.WriteLine(p);
        Console.WriteLine(p);
    }
}

Вы заново создаете файл каждый раз. Пытаться:

using (StreamWriter writer = new StreamWriter("people.txt"))
{
    foreach (Person p in queryAllPeople)
    {
        writer.WriteLine(p);
        Console.WriteLine(p);
    }

}

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

foreach (Person p in queryAllPeople)
{
  using (StreamWriter writer = new StreamWriter("people.txt", true))
  {

     writer.WriteLine(p);

  }
  Console.WriteLine(p);
}

Или просто заверните foreach в using заявление.

Другие вопросы по тегам