Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

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
. Альтернативно, если вы захотите создать новый файл и начать записывать в него данные, то может оказаться полезной такая последовательность действий:

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

StreamWriter sw = MyFile.CreateText;

Так же, как и со всеми другими потоковыми классами, важно закрыть

StreamWriter
, когда работа закончена:

sw.Close;

Запись в поток делается с помощью любого из четырех перегружаемых методов

StreamWriter.Write
. Простейший из них записывает строку и дополняет ее комбинацией возврат каретки — перевод строки:

string NextLine = "Groovy Line";

sw.Write(NextLine);

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

char NextChar = 'а';

sw.Write(NextChar);

Массив символов также возможен:

char [] Char Array = new char[100];

// инициализация этого массива символов

sw.Write(CharArray);

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

int nCharsToWrite = 50;

int StartAtLocation = 25;

char [] CharArray = new char[100];

//
инициализируем эти символы

sw.Write(CharArray, StartAtLocation, nCharsToWrite);

Пример: ReadWriteText

Пример

ReadWriteText
выводит результат использования классов
StreamReader
и
StreamWriter
. Он похож на предыдущий пример
ReadBinaryFile
, но предполагает, что считываемый файл является текстовым файлом, и выводит его в этом виде. Он может сохранить файл (со всеми изменениями, которые будут сделаны в тексте в текстовом поле). Он будет сохранять любой файл в формате Unicode.

Снимок показывает использование

ReadWriteText
для вывода того же файла
CivNegotiations
, который использовался раньше. В этот раз, однако, мы сможем прочитать содержимое гораздо легче.

Не будем вдаваться в детали добавления методов обработки событий для диалога открытия файла, поскольку они по сути такие же, что и в примере

BinaryFileReader
. Как и для данного примера, открытие нового файла приводит к вызову метода
DisplayFile
. Единственное реальное различие между этим примером и предыдущим состоит в реализации
DisplayFile
, а также в том факте, что теперь имеется возможность сохранить файл. Она представлена другим пунктом меню — save. Обработчик для этого пункта вызывает другой добавленный в код метод —
SaveFile
. (Отметим, что этот файл всегда перезаписывает первоначальный файл, этот пример не имеет возможности записи в другой файл.)

Посмотрим сначала на

SaveFile
, так как это простейшая функция. Мы просто записываем каждую строку текстового поля по очереди в поток
StreamWriter
, полагаясь на метод
StreamReader.WriteLine
для добавления комбинации возврата каретки-перевода строки в конце каждой строки:

void SaveFile {

 StreamWriter sw = new StreamWriter(ChosenFile, false, Encoding.Unicode);

 foreach (string Line in textBoxContents.Lines) sw.WriteLine(Line);

 sw.Close;

}

ChosenFile
является строковым полем основной формы, которое содержит имя прочитанного файла (как и в предыдущем примере). Отметим, что при открытии потока определяется кодирование Unicode. Если желательно записывать файлы в другом формате, необходимо изменить значение этого параметра. Второй параметр в этом конструкторе будет задан как true, если мы хотим добавлять к файлу, но в данном случае мы этого не делаем. Кодирование должно задаваться во время создания объекта записи потока. В дальнейшем оно доступно только для чтения как свойство
Encoding
.

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

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Неудержимый. Книга XIV

Боярский Андрей
14. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIV

Идеальный мир для Лекаря

Сапфир Олег
1. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря

Подаренная чёрному дракону

Лунёва Мария
Любовные романы:
любовно-фантастические романы
7.07
рейтинг книги
Подаренная чёрному дракону

Я Гордый часть 2

Машуков Тимур
2. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый часть 2

Бальмануг. Невеста

Лашина Полина
5. Мир Десяти
Фантастика:
юмористическое фэнтези
5.00
рейтинг книги
Бальмануг. Невеста

Пограничная река. (Тетралогия)

Каменистый Артем
Пограничная река
Фантастика:
фэнтези
боевая фантастика
9.13
рейтинг книги
Пограничная река. (Тетралогия)

Сонный лекарь 6

Голд Джон
6. Сонный лекарь
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Сонный лекарь 6

Тринадцатый

NikL
1. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
6.80
рейтинг книги
Тринадцатый

Ночь со зверем

Владимирова Анна
3. Оборотни-медведи
Любовные романы:
любовно-фантастические романы
5.25
рейтинг книги
Ночь со зверем

Страж. Тетралогия

Пехов Алексей Юрьевич
Страж
Фантастика:
фэнтези
9.11
рейтинг книги
Страж. Тетралогия

Кодекс Охотника. Книга XIV

Винокуров Юрий
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIV

Не грози Дубровскому! Том VIII

Панарин Антон
8. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том VIII

Барон устанавливает правила

Ренгач Евгений
6. Закон сильного
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Барон устанавливает правила