Библиотека LINQ to CSV - Написание</span><span> <span class=
ОГЛАВЛЕНИЕ
Страница 3 из 6
CsvContext.Write Overloads
- Write<T>(IEnumerable<T> values, string fileName)
- Write<T>(IEnumerable<T> values, string fileName, CsvFileDescription fileDescription)
- Write<T>(IEnumerable<T> values, TextWriter stream)
- Write<T>(IEnumerable<T> values, TextWriter stream, CsvFileDescription fileDescription)
Несколько интересных фактов об этих перегрузках:
- Ни одна из перегрузок не возвращает значение.
- В отличие от метода Read, Write не требует, чтобы T имел конструктор без параметров.
- Перегрузки, принимающие поток, записывают данные в поток. Перегрузка, которая принимает имя файла, записывает данные в файл.
- Перегрузки, которые не принимают объект CsvFileDescription, просто создают его сами, используя значения по умолчанию для свойств CsvFileDescription.
Перегрузки CsvContext.Read
- Read<T>(string fileName)
- Read<T>(string fileName, CsvFileDescription fileDescription)
- Read<T>(StreamReader stream)
- Read<T>(StreamReader stream, CsvFileDescription fileDescription)
Несколько интересных фактов об этих перегрузках:
- Каждая перегрузка возвращает IEnumerable<T>.
- T должен иметь конструктор без параметров. Если вы не определили конструктор для T, компилятор сам сгенерирует конструктор без параметров.
- Перегрузки, принимающие поток, читают данные из потока. Перегрузки, принимающие имя файла, читают данные из файла. Также смотрите раздел про задержанное чтение.
- Перегрузки, не принимающие объект CsvFileDescription, просто создают его сами, используя значения по умолчанию для свойств CsvFileDescription.
Задержанное чтение
Здесь описано, как перегрузки Read реализуют задержанное чтение:
- Когда вы вызываете метод Read (который возвращает IEnumerable<T>), никакие данные еще не читаются. Если используется файл, файл еще не открыт.
- Когда перечислитель извлекается из IEnumerable<T> (например, при начале цикла foreach), файл открывается для чтения. Если используется поток, поток перематывается (ищется начало потока).
- Каждый раз, когда вы извлекаете новый объект из перечислителя (например, при обходе с помощью цикла foreach), новая запись читается из файла или потока.
- Когда вы закрываете перечислитель (например, когда завершается цикл foreach, или когда вы его прерываете), файл закрывается. Если используется поток, он остается без изменений.
Это означает, что:
- При чтении из файла файл открывается для чтения, когда вы обращаетесь к IEnumerable<T> в цикле foreach.
- Файл может обновляться между сеансами доступа. Вы можете получить доступ к IEnumerable<T> в цикле foreach, затем обновить файл, затем снова получить доступ к IEnumerable<T> в цикле foreach,чтобы извлечь новые данные, и т.д. Вам нужно вызвать Read только один раз в начале, чтобы получить IEnumerable<T>.