Как добавить данные из списка в файл .txt с помощью switch-case
у меня есть классы Controller и Person,мне нужно добавить данные в свой список,все данные, которые добавляются в консоль, должны храниться в файле .txt.То есть, если пользователь вводит 1, чтобы увидеть данные, они должны быть прочитаны из файла,а затем отображены, когда пользователь вводит 2, чтобы добавить новые данные, они должны быть прочитаны из файла, а затем отображены.
я уже написал функцию Show (), она работает,но функция add() не работает,что у меня ложно?
Что я уже пробовал:
class Controller { public List<Person> all; public void Show() { string path = "C:/Users/User/Desktop/mardik.txt"; FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read); BinaryFormatter bf = new BinaryFormatter(); List<Person> all = bf.Deserialize(fs) as List<Person>; foreach (Person item in all) { Console.WriteLine(item.name + " " + item.age); } } public void Add() { string path = "C:/Users/User/Desktop/mardik.txt"; FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read); BinaryFormatter bf = new BinaryFormatter(); List<Person> all = bf.Deserialize(fs) as List<Person>; Console.WriteLine("Enter new user's data"); string text = Console.ReadLine(); foreach(Person item in all) { Console.WriteLine(item.name + " " + item.age); } }
В чем моя ошибка в функции Add ()?
[Serializable] class Person { public string name; public int age; public Person(string a, int b) { this.name = a; this.age = b; } }
static void Main(string[] args) { string path = "C:/Users/User/Desktop/mardik.txt"; List<Person> mardik = new List<Person>(); //mardik.Add(new Person("Valod", 20)); //mardik.Add(new Person("Petros", 23)); //mardik.Add(new Person("Poghos", 25)); //mardik.Add(new Person("Hranush", 22)); //mardik.Add(new Person("Suren", 18)); //FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); //BinaryFormatter bf = new BinaryFormatter(); //bf.Serialize(fs, mardik); //fs.Close(); Controller c = new Controller(); while (true) { Console.WriteLine(); Console.WriteLine("What do you want to do:\n1.Show all People\n2.Add new person\n3.Delete any person"); int x = int.Parse(Console.ReadLine()); switch (x) { case 1: c.Show(); break; case 2: c.Add(); break; } } }
Richard MacCutchan
Вы забыли включить код для перезаписи файла после ввода новых данных. Лучшей структурой для вашей программы была бы:
Start: Read the input file data into the List While user select options: if 1 then show List Else if 2 then add new entry Else if some_other_value the end while loop If new entries added Write entries to new file End:
Suren97
я не понимаю, вы можете показать мне это как код?
Richard MacCutchan
Я дал вам псевдокод, преобразование которого в C# не составляет труда.
Suren97
но мне кажется, что я так и сделал, или я просто не понимаю, что вы имеете в виду?
Richard MacCutchan
Извините, но это не так. Посмотрите на структуру вашего кода. Вы читаете входной файл в двух местах, поэтому вы создаете два отдельных списка объектов; это просто дублирование работы. И это также означает, что каждый раз, когда вы вызываете Show или Add, вы снова перечитываете файл, что еще более расточительно. Другие проблемы, перечисленные в сообщении OriginalGriff ниже.
Suren97
Пожалуйста, если вы можете показать мне, как я должен написать этот код? тогда я попробую написать функцию delete() сам :)