Как считать все строки из файла c
Для работы непосредственно с текстовыми файлами в пространстве System.IO определены специальные классы: StreamReader и StreamWriter .
Запись в файл и StreamWriter
Для записи в текстовый файл используется класс StreamWriter . Некоторые из его конструкторов, которые могут применяться для создания объекта StreamWriter:
StreamWriter(string path) : через параметр path передается путь к файлу, который будет связан с потоком
StreamWriter(string path, bool append) : параметр append указывает, надо ли добавлять в конец файла данные или же перезаписывать файл. Если равно true, то новые данные добавляются в конец файла. Если равно false, то файл перезаписываетсяя заново
StreamWriter(string path, bool append, System.Text.Encoding encoding) : параметр encoding указывает на кодировку, которая будет применяться при записи
Свою функциональность StreamWriter реализует через следующие методы:
int Close() : закрывает записываемый файл и освобождает все ресурсы
void Flush() : записывает в файл оставшиеся в буфере данные и очищает буфер.
Task FlushAsync() : асинхронная версия метода Flush
void Write(string value) : записывает в файл данные простейших типов, как int, double, char, string и т.д. Соответственно имеет ряд перегруженных версий для записи данных элементарных типов, например, Write(char value) , Write(int value) , Write(double value) и т.д.
Task WriteAsync(string value) : асинхронная версия метода Write. Обратите внимание, что асинхронные версии есть не для всех перегрузок метода Write.
void WriteLine(string value) : также записывает данные, только после записи добавляет в файл символ окончания строки
Task WriteLineAsync(string value) : асинхронная версия метода WriteLine
Рассмотрим запись в файл на примере:
В данном случае два раза создаем объект StreamWriter. В первом случае если файл существует, то он будет перезаписан. Если не существует, он будет создан. И в нее будет записан текст из переменной text. Во втором случае файл открывается для дозаписи, и будут записаны атомарные данные — строка и число.
По завершении в папке программы мы сможем найти файл note.txt, который будет иметь следующие строки:
В пример выше будет использоваться кодировка по умолчанию. но также можно задать ее явным образом:
Чтение из файла и StreamReader
Класс StreamReader позволяет нам легко считывать весь текст или отдельные строки из текстового файла.
Некоторые из конструкторов класса StreamReader:
StreamReader(string path) : через параметр path передается путь к считываемому файлу
StreamReader(string path, System.Text.Encoding encoding) : параметр encoding задает кодировку для чтения файла
Среди методов StreamReader можно выделить следующие:
void Close() : закрывает считываемый файл и освобождает все ресурсы
int Peek() : возвращает следующий доступный символ, если символов больше нет, то возвращает -1
int Read() : считывает и возвращает следующий символ в численном представлении. Имеет перегруженную версию: Read(char[] array, int index, int count) , где array — массив, куда считываются символы, index — индекс в массиве array, начиная с которого записываются считываемые символы, и count — максимальное количество считываемых символов
Чтение файла построчно
Нужно открыть файл и прочитать его построчно, то есть взять первую строку занести её в переменную, проделать с ней определённые операции, потом брать вторую и т.д.
вот код не вырванный из контекста
![]()
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.11.43304
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
C#. Текстовые файлы. Решение задач на модификацию текстовых файлов. Классы File, StreamReader, StreamWriter
В данной теме приведены примеры решения наиболее распространенных задач, которые возникают при обработке текстовых файлов на языке C#. Примеры приведены для приложений, созданных по шаблону Console Application. Решение каждой задачи представлено соответствующей статической функцией. По желанию можно модифицировать продемонстрированные статические функции в функции экземпляра класса.
Для обработки текстовых файлов продемонстрирована работа классов File , StreamReader , StreamWriter .
Содержание
- 1. Как определить, что данные в текстовом файле закончились?
- 2. Последовательность действий при чтении данных из файла. Использование класса StreamReader
- 3. Функция PrintFile() . Вывести содержимое текстового файла на экран. Способ 1
- 4. Функция PrintFile2() . Вывести содержимое текстового файла на экран. Способ 2
- 5. Функция ReplaceStringInFile() . Замена строки в текстовом файле. Использование возможностей класса File
- 6. Функция RemoveStringFromFile() . Удаление строки из файла по индексу. Пример
- 7. Функция InsertLineInFile() . Вставка строки в файл в заданной позиции
- 8. Функция ConvertLinesFileToList() . Конвертировать строки файла в список List<string>
- 9. Функция AddArrayLinesInFile() . Добавление массива строк в конец файла
- 10. Функция SwapLinesInFile() . Обмен местами двух строк в файле
- 11. Функция ReverseStringsInFile() . Реверсирование строк файла (перестановка строк файла в обратном порядке)
- 12. Функция SortLineInFileBubble() . Сортировка строк в файле методом пузырька
Поиск на других ресурсах:
1. Как определить, что данные в текстовом файле закончились?
Чтение данных из текстового файла осуществляется с помощью метода ReadLine() . Метод читает строку символов из текущего потока и возвращает его в виде типа string . Признаком окончания строки есть символ ‘\n’ в файловом потоке. Если достигнут конец файла, метод ReadLine() возвращает значение null . Соответствующая проверка в программе позволяет определить, прочитано ли все данные из текстового файла.
2. Последовательность действий при чтении данных из файла. Использование класса StreamReader
Чтобы прочитать данные из текстового файла нужно выполнить приблизительно следующую последовательность действий:
1. Подключить модуль System.IO с помощью строки
2. Создать экземпляр класса StreamReader с помощью одного из перегруженных конструкторов. Одновременно с созданием экземпляра происходит открытие файла для чтения или записи. Класс StreamReader имеет несколько конструкторов.
В нижеследующем примере открывается текстовый файл с именем «TextFile1.txt» . Файл открывается для чтения (по умолчанию).
3. С помощью экземпляра StreamReader осуществить циклическое чтение строк файла как показано ниже
4. Закрыть файл с помощью метода Close()
3. Функция PrintFile() . Вывести содержимое текстового файла на экран. Способ 1
Для наглядной демонстрации чтения информации из текстового файла приводится статическая функция PrintFile() , которая выводит содержимое текстового файла на экран. Для чтения строк из файла функция использует метод ReadLine() класса StreamReader . Если достигнут конец файла, то ReadLine() возвращает null .
4. Функция PrintFile2() . Вывести содержимое текстового файла на экран. Способ 2
Ниже приведен пример статической функции PrintFile2() , которая использует метод ReadToEnd() класса StreamReader для чтения строк из файла. В отличие от ReadLine() , метод ReadToEnd() читает все строки из файла и записывает их в строку типа string включительно с символами ‘\n’ , ‘\r’ .
Алгоритм работы следующий:
- сначала читаются все строки из файла в одну строку типа string ;
- для полученной строки вызывется функция Split() , которая разбивает строку на массив строк. Признаком разбиения строки есть символ ‘\n’ ;
- вывести массив строк на экран.
5. Функция ReplaceStringInFile() . Замена строки в текстовом файле. Использование возможностей класса File
При операциях с файлами важно придерживаться правильной последовательности чтения/записи. Если попробовать изменять данные в файле непосредственно, то можно допустить много трудноуловимых ошибок. Поэтому, для замены строки в текстовом файле рекомендуется использовать следующий алгоритм:
- прочесть все строки из файла в массив. В примере для чтения строк из файла используется метод ReadAllLines() статического класса File . Этот метод возвращает массив типа string[] ;
- осуществить замену строки в массиве;
- записать строки из массива снова в файл. Для записи используется метод WriteAllLines() статического класса File . В метод передается имя файла и массив строк типа string[] , который нужно записать.
Текст демонстрационного консольного приложения следующий.
6. Функция RemoveStringFromFile() . Удаление строки из файла по индексу. Пример
При манипуляциях с файлами, которые изменяют общее количество строк в файле (вставка, удаление), лучшее представлять прочитанную информацию в виде списков типа List<string> . Это связано с тем, что в списки удобнее вставлять (удалять) элементы в конкретные позиции. Список не требует выделения дополнительных (часто больших) массивов информации в отличие от массива.
В данном примере продемонстрировано использование функции ReadLine() класса StreamReader . При чтении строки из файла эта функция удаляет символы ‘\r’ , ‘n’ , которые требуют дополнительной обработки.
7. Функция InsertLineInFile() . Вставка строки в файл в заданной позиции
По образцу пункта 6 можно реализовать вставку строки в файл в заданной позиции. Строки в файле предварительно копируются в список типа List<string> . Использование списков в подобных задачах облегчает работу программиста, поскольку списки содержат все необходимые методы вставки, добавления, удаления элемента.
Предложенная функция InsertLineInFile() имеет одну особенность. Если позиция вставки (нумеруется с 0) равна количеству элементов в файле n , то строка вставки добавляется в конец файла. Таким образом функция реализует вставку и добавление строки в файл.
8. Функция ConvertLinesFileToList() . Конвертировать строки файла в список List<string>
В пунктах 6, 7 повторяется код, который образовывает список типа List<string> из строк файла. Поэтому, целесообразно написать функцию ConvertLinesFileToList() , которая реализует конвертирование строк файла в список. Текст функции следующий.
9. Функция AddArrayLinesInFile() . Добавление массива строк в конец файла
В примере приведена функция, которая добавляет массив строк в конец файла. Данная функция использует функцию ConvertLinesFileToList() , которая возвращает строки файла в виде списка и описывается в пункте 8. Для работы с файлами используются возможности классов StreamReader и StreamWriter .
Алгоритм метода следующий:
- прочитать данные из файла в список типа List<string> ;
- добавить к списку массив строк;
- записать измененный список в файл. Для записи списка используются средства класса StreamWriter .
Программный код функции AddArrayLinesInFile() следующий.
Использование функции в другом программном коде может быть, например, таким.
10. Функция SwapLinesInFile() . Обмен местами двух строк в файле
Обмен местами двух строк в файле не изменяет общее количество строк. Поэтому, прочитанные строки из файла целесообразно представить массивом типа string[] .
В C# в статическом классе File есть полезная функция ReadAllLines() , которая возвращает строки файла в виде массива string[] . Как и в случае с функцией ReadLine() класса StreamReader , каждая строка в функции ReadAllLines() не содержит символов ‘\n’ и ‘\r’ .
Статический файл File также содержит функцию WriteAllLines() , которая записывает строки типа string[] в файл.
Ниже приведен фрагмент кода, который содержит описание функции SwapLinesInFile() .
Использование функции SwapLinesInFile() в другом коде может быть, например, таким
Чтение файла с C#
В этом посте будет обсуждаться, как читать файл в C#.
1. Использование FileStream Class
В следующем примере используется FileStream.Read() метод чтения всего файла по частям.
2. Использование File Class
В следующем примере кода показано использование File.ReadAllLines() метод для чтения строк файла в массив строк.
Мы не должны использовать вышеуказанный метод с большими файлами. ReadLines() метод предпочтительнее, чем ReadAllLines() метод как ReadLines возвращает Enumerable , и мы можем перечислить до того, как будет возвращена вся коллекция.
Чтобы прочитать весь текст в файле за один раз, мы можем использовать ReadAllText() метод.
3. Использование StreamReader Class
Другим решением является использование StreamReader.ReadLine() метод. Мы можем использовать его для чтения строк из файла до тех пор, пока не будет достигнут конец файла.
Мы также можем использовать StreamReader.ReadToEnd() метод, который считывает весь файл за одну операцию.
Это все о чтении файла с помощью C#.
Оценить этот пост
Средний рейтинг 5 /5. Подсчет голосов: 40
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования