Прочитать файл построчно c
Класс FileStream представляет возможности по считыванию из файла и записи в файл. Он позволяет работать как с текстовыми файлами, так и с бинарными.
ReadAllLines(String)
Открывает текстовый файл, считывает все строки файла и затем закрывает файл.
Параметры
Файл, открываемый для чтения.
Возвращаемое значение
Массив строк, содержащий все строки файла.
Исключения
path имеет значение null .
Указанный путь, имя файла или оба значения превышают максимальную длину, заданную в системе.
Указан недопустимый путь (например, он ведет на несопоставленный диск).
При открытии файла произошла ошибка ввода-вывода.
Параметр path указывает файл, доступный только для чтения.
-или- Эта операция не поддерживается на текущей платформе.
-или- Параметр path определяет каталог.
-или- У вызывающего объекта отсутствует необходимое разрешение.
Файл, заданный параметром path , не найден.
Параметр path задан в недопустимом формате.
У вызывающего объекта отсутствует необходимое разрешение.
Закрытие потока
Класс FileStream для освобождения всех реусрсов, связанных с файлом, реализует интерфейс IDisposable. Соответственно после завершения работы с FileStream необходимо освободить связанный с ним файл вызовом метода Dispose. Для корректного закрытия можно вызвать метод Close() , который вызывает метод Dispose:
Либо можно использовать конструкцию using, которая автоматически освободит все связанные с FileStream ресурсы:
Свойства и методы FileStream
Рассмотрим наиболее важные свойства класса FileStream :
Свойство Length : возвращает длину потока в байтах
Свойство Position : возвращает текущую позицию в потоке
Свойство Name : возвращает абсолютный путь к файлу, открытому в FileStream
Для чтения/записи файлов можно применять следующие методы класса FileStream :
void CopyTo(Stream destination) : копирует данные из текущего потока в поток destination
Task CopyToAsync(Stream destination) : асинхронная версия метода CopyTo
void Flush() : сбрасывает содержимое буфера в файл
Task FlushAsync() : асинхронная версия метода Flush
int Read(byte[] array, int offset, int count) : считывает данные из файла в массив байтов и возвращает количество успешно считанных байтов. Принимает три параметра:
array - массив байтов, куда будут помещены считываемые из файла данные
offset представляет смещение в байтах в массиве array, в который считанные байты будут помещены
count - максимальное число байтов, предназначенных для чтения. Если в файле находится меньшее количество байтов, то все они будут считаны.
Task ReadAsync(byte[] array, int offset, int count) : асинхронная версия метода Read
long Seek(long offset, SeekOrigin origin) : устанавливает позицию в потоке со смещением на количество байт, указанных в параметре offset.
void Write(byte[] array, int offset, int count) : записывает в файл данные из массива байтов. Принимает три параметра:
array - массив байтов, откуда данные будут записываться в файл
offset - смещение в байтах в массиве array, откуда начинается запись байтов в поток
count - максимальное число байтов, предназначенных для записи
Чтение и запись файлов
FileStream представляет доступ к файлам на уровне байтов, поэтому, например, если вам надо считать или записать одну или несколько строк в текстовый файл, то массив байтов надо преобразовать в строки, используя специальные методы. Поэтому для работы с текстовыми файлами применяются другие классы.
В то же время при работе с различными бинарными файлами, имеющими определенную структуру, FileStream может быть очень даже полезен для извлечения определенных порций информации и ее обработки.
Посмотрим на примере считывания-записи в текстовый файл:
Разберем этот пример. Вначале определяем путь к файлу и текст для записи в файл.
И при чтении, и при записи для создания и удаления объекта FileStream используется конструкция using , по завершению которой у созданного объекта FileStream автоматически вызывается метод Dispose , и, таким образом, объект уничтожается.
Поскольку операции с файлами могут занимать продолжительное время и являются узким местом в работе программы, рекомендуется использовать асинхронные версии методов FileStream. И при записи, и при чтении применяется объект кодировки Encoding.Default из пространства имен System.Text . В данном случае мы используем два его метода: GetBytes для получения массива байтов из строки и GetString для получения строки из массива байтов.
В итоге введенная нами строка записывается в файл note.txt . И мы получим следующий консольный вывод:
Записанный файл по сути представляет бинарный файл (не текстовый), хотя если мы в него запишем только строку, то сможем посмотреть в удобочитаемом виде этот файл, открыв его в текстовом редакторе. Однако если мы в него запишем случайные байты, например:
То у нас могут возникнуть проблемы с его пониманием. Поэтому для работы непосредственно с текстовыми файлами предназначены отдельные классы - StreamReader и StreamWriter.
ReadAllText(String, Encoding)
Открывает файл, считывает весь текст файла с заданной кодировкой и затем закрывает файл.
Параметры
Файл, открываемый для чтения.
Кодировка, примененная к содержимому файла.
Возвращаемое значение
Строка, содержащая весь текст файла.
Исключения
path имеет значение null .
Указанный путь, имя файла или оба значения превышают максимальную длину, заданную в системе.
Указан недопустимый путь (например, он ведет на несопоставленный диск).
При открытии файла произошла ошибка ввода-вывода.
Параметр path указывает файл, доступный только для чтения.
-или- Эта операция не поддерживается на текущей платформе.
-или- Параметр path определяет каталог.
-или- У вызывающего объекта отсутствует необходимое разрешение.
Файл, заданный параметром path , не найден.
Параметр path задан в недопустимом формате.
У вызывающего объекта отсутствует необходимое разрешение.
Чтение из файла и 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 - максимальное количество считываемых символов
Task ReadAsync() : асинхронная версия метода Read
string ReadLine() : считывает одну строку в файле
string ReadLineAsync() : асинхронная версия метода ReadLine
string ReadToEnd() : считывает весь текст из файла
string ReadToEndAsync() : асинхронная версия метода ReadToEnd
Сначала считаем текст полностью из ранее записанного файла:
Считаем текст из файла построчно:
В данном случае считываем построчно через цикл while: while ((line = await reader.ReadLineAsync()) != null) - сначала присваиваем переменной line результат функции reader.ReadLineAsync() , а затем проверяем, не равна ли она null. Когда объект sr дойдет до конца файла и больше строк не останется, то метод reader.ReadLineAsync() будет возвращать null.
Построчное чтение из файла
Из файла нужно построчно считать числа типа double и записать в массив. Файл примерно выглядит.
Построчное чтение файла
Подскажите как читать файл построчно что бы работало примерно так сначала читается 1 строка из.
Построчное чтение из файла
Всем привет! Помогите написать функцию построчного вывода из файла. Условно, есть файл с таким.
Построчное чтение из файла
Необходимо построчно прочитать данные из файла, из разобрать их по переменным. Образец данных в.
перед циклом t = 0; есть.
Добавлено через 1 минуту
Кстати как открыт файл в двоичном fopen("path","rb"); или текстовом режиме fopen("path","r") . Это важно!
Добавлено через 1 минуту
- стоп чисел в файле что 50. Ладно я уже пишу код.
Добавлено через 2 минуты
Вот код
- не зависимо сколько чисел в файле читаем пока не встретим конец файла
Вот получившаяся программа, она компилица, но при запуске выдаёт ошибку, мол "sum" не инициализирован; да, перед тем как считать сумму нужно было ещё создать этот файл и заполнить
, а у Вас??)))
Вот так запишите
int i,n[50], sum = 0 ,val; - и всё заработает
Добавлено через 5 минут
FolkAltair, ауууу.
Построчное чтение файла в массив
доброго всем :) своими силами изучаю C. Поставил себе задачу: Есть некий файл. Нужно читать его.
Построчное чтение данных из файла
Есть фаил: selulhmb 83 86 77 82 glrdos 54 48 3 35 canryx 15 59 5 26 cdqqri 45 0 66 37 bxdsj 49.
Построчное чтение из файла сделать оптимальнее
Есть вот такой код(linux, компилятор gcc), читающий файл построчно: void fun(. ) < .
Построчное чтение неопределенного количества чисел из файла
Здраствуйте. У меня программа построчно читает числа из файла в масив. Потом выполняется сортировка.
Построчное чтение из файла, заполнение структуры и запись в бинарный файл
Здравствуйте. Пытаюсь сделать чтение из текстового файла построчно, а затем сразу забиваю в.
Построчное считывание из файла
Сразу к сути вопроса - мне надо считать текст из файла(целиком), но текст может быть слишком.
Произвольный доступ к файлам
Нередко бинарные файлы представляют определенную структуру. И, зная эту структуру, мы можем взять из файла нужную порцию информации или наоброт записать в определенном месте файла определенный набор байтов. Например, в wav-файлах непосредственно звуковые данные начинаются с 44 байта, а до 44 байта идут различные метаданные - количество каналов аудио, частота дискретизации и т.д.
С помощью метода Seek() мы можем управлять положением курсора потока, начиная с которого производится считывание или запись в файл. Этот метод принимает два параметра: offset (смещение) и позиция в файле. Позиция в файле описывается тремя значениями:
SeekOrigin.Begin : начало файла
SeekOrigin.End : конец файла
SeekOrigin.Current : текущая позиция в файле
Курсор потока, с которого начинается чтение или запись, смещается вперед на значение offset относительно позиции, указанной в качестве второго параметра. Смещение может быть отрицательным, тогда курсор сдвигается назад, если положительное - то вперед.
Рассмотрим простой пример:
Вначале записываем в файл текст "hello world". Затем снова обращаемся к файла для считывания. Сначала перемещаем курсор на пять символов назад относительно конца файлового потока:
То есть после выполнения этого вызова курсор будет стоять на позиции символа "w".
После этого считываем пять байт начиная с символа "w". В кодировке по умолчанию 1 символ будет представлять 1 байт. Поэтому чтение 5 байт будет эквивалентно чтению пяти сиволов: "world".
Соответственно мы получим следующий консольный вывод:
Рассмотрим чуть более сложный пример - с записью начиная с некоторой позиции:
Здесь также вначале записываем в файл строку "hello world". Затем также открываем файл и опять же перемещаемся в конец файла, не доходя до конца пять символов (то есть опять же с позиции символа "w"), и осуществляем запись строки "house". Таким образом, строка "house" заменяет строку "world".
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Открывает текстовый файл, считывает весь текст файла в строку и затем закрывает файл.
Примеры
В следующем примере кода показано использование ReadAllText метода для отображения содержимого файла. В этом примере создается файл, если он еще не существует, и в него добавляется текст.
Создание FileStream
Для создания объекта FileStream можно использовать как конструкторы этого класса, так и статические методы класса File. Конструктор FileStream имеет множество перегруженных версий, из которых отмечу лишь одну, самую простую и используемую:
Здесь в конструктор передается два параметра: путь к файлу и перечисление FileMode . Данное перечисление указывает на режим доступа к файлу и может принимать следующие значения:
Append : если файл существует, то текст добавляется в конец файл. Если файла нет, то он создается. Файл открывается только для записи.
Create : создается новый файл. Если такой файл уже существует, то он перезаписывается
CreateNew : создается новый файл. Если такой файл уже существует, то приложение выбрасывает ошибку
Open : открывает файл. Если файл не существует, выбрасывается исключение
OpenOrCreate : если файл существует, он открывается, если нет - создается новый
Truncate : если файл существует, то он перезаписывается. Файл открывается только для записи.
Другой способ создания объекта FileStream представляют статические методы класса File:
Первый метод открывает файл с учетом объекта FileMode и возвращает файловой поток FileStream. У этого метода также есть несколько перегруженных версий. Второй метод открывает поток для чтения, а третий открывает поток для записи.
Комментарии
Этот метод открывает файл, считывает весь текст в файле и возвращает его в виде строки. Затем он закрывает файл.
Этот метод пытается автоматически определить кодировку файла на основе наличия меток порядка байтов. Можно обнаружить форматы кодировки UTF-8 и UTF-32 (как биг-эндиан, так и маленький эндиан).
Дескриптор файла гарантированно будет закрыт этим методом, даже если возникают исключения.
Чтобы использовать параметры кодирования, настроенные для операционной системы, укажите Encoding.Default свойство для encoding параметра.
Комментарии
Этот метод открывает файл, считывает весь текст в файле и возвращает его в виде строки. Затем он закрывает файл.
Этот метод пытается автоматически определить кодировку файла на основе наличия меток порядка байтов. Можно обнаружить форматы кодировки UTF-8 и UTF-32 (как биг-эндиан, так и маленький эндиан).
Используйте перегрузку ReadAllText(String, Encoding) метода при чтении файлов, которые могут содержать импортированный текст, так как нераспознанные символы могут быть неправильно прочитаны.
Дескриптор файла гарантированно будет закрыт этим методом, даже если возникают исключения.
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Открывает текстовый файл, считывает все строки файла в массив строк и затем закрывает файл.
Перегрузки
Открывает текстовый файл, считывает все строки файла и затем закрывает файл.
Открывает файл, считывает все строки файла с заданной кодировкой и затем закрывает файл.
Примеры
В следующем примере кода показано использование ReadAllLines метода для отображения содержимого файла. В этом примере создается файл, если он еще не существует, и в него добавляется текст.
ReadAllText(String)
Открывает текстовый файл, считывает весь текст файла и затем закрывает файл.
Параметры
Файл, открываемый для чтения.
Возвращаемое значение
Строка, содержащая весь текст файла.
Исключения
path имеет значение null .
Указанный путь, имя файла или оба значения превышают максимальную длину, заданную в системе.
Указан недопустимый путь (например, он ведет на несопоставленный диск).
При открытии файла произошла ошибка ввода-вывода.
Параметр path указывает файл, доступный только для чтения.
-или- Эта операция не поддерживается на текущей платформе.
-или- Параметр path определяет каталог.
-или- У вызывающего объекта отсутствует необходимое разрешение.
Файл, заданный параметром path , не найден.
Параметр path задан в недопустимом формате.
У вызывающего объекта отсутствует необходимое разрешение.
Примеры
В следующем примере кода показано использование ReadAllText метода для отображения содержимого файла. В этом примере создается файл, если он еще не существует, и в него добавляется текст.
Комментарии
Этот метод открывает файл, считывает каждую строку файла, а затем добавляет каждую строку в качестве элемента массива строк. Затем он закрывает файл. Строка определяется как последовательность символов, за которой следует возврат каретки ('\r'), веб-канал строки ('\n') или возврат каретки сразу после строки. Результирующая строка не содержит завершающего возврата каретки и (или) канала строки.
Этот метод пытается автоматически определить кодировку файла на основе наличия меток порядка байтов. Можно обнаружить форматы кодировки UTF-8 и UTF-32 (как биг-эндиан, так и маленький эндиан).
Для работы непосредственно с текстовыми файлами в пространстве System.IO определены специальные классы: StreamReader и StreamWriter .
См. также раздел
Перегрузки
Открывает файл, считывает весь текст файла с заданной кодировкой и затем закрывает файл.
Открывает текстовый файл, считывает весь текст файла и затем закрывает файл.
Создание FileStream
Для создания объекта FileStream можно использовать как конструкторы этого класса, так и статические методы класса File. Конструктор FileStream имеет множество перегруженных версий, из которых отмечу лишь одну, самую простую и используемую:
Здесь в конструктор передается два параметра: путь к файлу и перечисление FileMode . Данное перечисление указывает на режим доступа к файлу и может принимать следующие значения:
Append : если файл существует, то текст добавляется в конец файл. Если файла нет, то он создается. Файл открывается только для записи.
Create : создается новый файл. Если такой файл уже существует, то он перезаписывается
CreateNew : создается новый файл. Если такой файл уже существует, то приложение выбрасывает ошибку
Open : открывает файл. Если файл не существует, выбрасывается исключение
OpenOrCreate : если файл существует, он открывается, если нет - создается новый
Truncate : если файл существует, то он перезаписывается. Файл открывается только для записи.
Другой способ создания объекта FileStream представляют статические методы класса File:
Первый метод открывает файл с учетом объекта FileMode и возвращает файловой поток FileStream. У этого метода также есть несколько перегруженных версий. Второй метод открывает поток для чтения, а третий открывает поток для записи.
Запись в файл и 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, который будет иметь следующие строки:
В пример выше будет использоваться кодировка по умолчанию. но также можно задать ее явным образом:
Применяется к
Читайте также: