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

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

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

person user1353517    schedule 30.11.2012    source источник
comment
Я предполагаю, что Writer.WriteLine(p) неверен, но я не могу понять, что с ним не так.   -  person user1353517    schedule 30.11.2012
comment
вероятно, он перезаписывает предыдущие написанные строки. Было бы лучше, я думаю, сделать foreach в рамках использования streamwriter.   -  person CuccoChaser    schedule 30.11.2012
comment
возможно, используя (StreamWriter Writer = new StreamWriter (people.txt, true)?   -  person Pavenhimself    schedule 30.11.2012


Ответы (4)


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

person Tallek    schedule 30.11.2012

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

using (StreamWriter writer = new StreamWriter("people.txt"))
{
    foreach (Person p in queryAllPeople)
    {
        writer.WriteLine(p);
        Console.WriteLine(p);
    }
}
person Fredrik Mörk    schedule 30.11.2012
comment
Console.WriteLine(p); все еще должен жить внутри цикла foreach. - person Rawling; 30.11.2012

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

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

}
person Shawn C.    schedule 30.11.2012
comment
Спасибо за помощь, теперь понял! - person user1353517; 30.11.2012

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

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

     writer.WriteLine(p);

  }
  Console.WriteLine(p);
}

Или просто оберните foreach оператором using.

person Steve Danner    schedule 30.11.2012