#c_sharp
Всем привет! У меня есть обычный текстовый файл, в котором каждый новый элемент - это новая строка. Пример файла: Игра Строитель Лампа Стол И вот мне надо загрузить это всё в listBox, чтобы каждая строка в файле была отдельной строкой в listBox'e. Когда я делаю так: using (StreamReader sr = new StreamReader(File.Open("history.txt", FileMode.Open))) { listHistory.Items.Add(sr.ReadToEnd()); } У меня всё в одной строке.
Ответы
Ответ 1
Если "каждый новый элемент это новая строка", т.е. файл выглядит так: Игра Строитель Лампа Стол тогда можно решить так: using (StreamReader sr = new StreamReader(File.Open("history.txt", FileMode.Open))) { while (!sr.EndOfStream) listHistory.Items.Add(sr.ReadLine()); }Ответ 2
StreamReader.ReadToEnd() считывает до конца файла в одну строку. Используйте StreamReader.ReadLine().Ответ 3
Есть один недостаток в варианте using (StreamReader sr = new StreamReader(File.Open("history.txt", FileMode.Open))) { while (!sr.EndOfStream) listHistory.Items.Add(sr.ReadLine()); } Нам приходится много раз вызывать файл. А это достаточно длительный процесс Логичнее прочитать весь файл sr.ReadToEnd(); А затем разбивать файл на части в самом коде Примерно так string[] strings; using (StreamReader sr = new StreamReader(@"path.txt")) { strings = sr.ReadToEnd().Split(new char[] { '\n' }); } Если я ошибаюсь - попросил бы исправить. Код сверху - сжатый вариант этого кода string[] strings; using (StreamReader sr = new StreamReader(@"path.txt")) { string s = sr.ReadToEnd(); char[] divizorz = new char[] { '\n' }; strings = s.Split(divizorz); } Просто по-моему сверху лучше, т.к. код не загромождается лишними именами Здесь \n это означает символ переноса строки
Комментариев нет:
Отправить комментарий