Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Как правильно прочитать файл?

#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 это означает символ переноса строки

Комментариев нет:

Отправить комментарий