Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

□

ASCII

□

Unicode

□

UTF7

□

UTF8

□

BigEndianUnicode

Следующий пример показывает сцепление

StreamReader
с
FileStream
. Преимущество этого состоит в том, что можно явно определить, создавать ли файл и полномочия совместного доступа, что невозможно сделать, если напрямую соединять StreamReader с файлом:

FileStream fs =

 new FileStream(@"C:\My Documents\ReadMe.txt", FileMode.Open,

 FileAccess.Read, FileShare.None);

StreamReader sr = new StreamReader(fs);

Для этого примера мы уточняем., что

StreamReader
будет искать маркеры кода байтов, чтобы определись используемый метод кодирования, так он будет делать и в следующих примерах, где
StreamReader
получают из экземпляра
FileInfo
:

FileInfo MyFile = new FileInfo(@"C:\My Documents\ReadMe.txt");

StreamReader sr = MyFile.OpenText;

Также как с

FileStream
, необходимо всегда закрывать
StreamReader
после использования. Невыполнение этого приведет к файлу, остающемуся заблокированным для других процессов (если только для создания
StreamReader
не использовался
FileStream
со спецификацией
FileShare.ShareReadWrite
).

sr.Close;

Теперь мы перешли к проблеме создания экземпляра

StreamReader
. Так же, как с классом
FileStream
, мы просто указываем различные способы чтения данных и оставляем другие, менее часто используемые, методы
StreamReader
для документации MSDN.

Возможно, простейшим в использовании является метод

ReadLine
, который продолжает чтение, пока не доходит до конца строки. Он не включает комбинацию возврат каретки-перевода строки, которая отмечает конец строки в возвращаемой строке:

string NextLine = sr.ReadLine;

Альтернатива — захватить весь остаток файла (или строго говоря, остаток потока) в одной строке:

string RestOfStream = sr.ReadToEnd;

Можно также прочитать один символ:

int NextChar = sr.Read;

Эта конструкция с

Read
преобразует возвращаемый символ в
int
. Это делается так, потому что имеется возможность альтернативного возврата -1, если будет достигнут конец потока.

Наконец, можно прочитать заданное число символов в массив с использованием смещения:

// прочитать 100 символов

int nChars = 100;

chr [] CharArray = new char[nChars];

int nCharsRead = sr.Read(CharArray, 0, nChars);

nCharsRead
будет меньше
nChars
, если запрос чтения потребует больше символов, чем осталось в файле.

Класс StreamWriter

Он работает практически таким же образом, как и

StreamReader
, за исключением того только, что
StreamWriter
используется для записи в файл (или в другой поток). Возможности создания
StreamWriter
включают в себя:

StreamWriter sw = new StreamWriter(@"C:\My Documents\ReadMe.txt");

Приведенный выше код будет использовать кодирование UTF8, которое рассматривается в .NET как метод кодирования по умолчанию. Если желательно определить альтернативное кодирование:

StreamWriter sw = new StreamWriter(@"C:\My Docurnents\ReadMe.txt", true, Encoding.ASCII);

В этом конструкторе вторым параметром является Boolean, который указывает, должен ли файл быть открыт для добавления. Странно, но не существует конструктора, который получает только имя файла и класс кодирования.

Конечно, можно соединить

StreamWriter
с файловым потоком, чтобы предоставить больший контроль над параметрами открытия файла:

FileStream fs = new FileStream(@"C:\Му Documents\ReadMe.txt",

FileMode.CreateNew, FileAcces.Write, FileShare.ShareRead);

StreamWriter sw = new StreamWriter(fs);

FileInfo
не реализует никаких методов, которые возвращают
StreamWriter
. Альтернативно, если вы захотите создать новый файл и начать записывать в него данные, то может оказаться полезной такая последовательность действий:

  • Читать дальше
  • 1
  • ...
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: