Программирование >>  Программирование с использованием ajax 

1 ... 245 246 247 [ 248 ] 249 250 251 ... 396


На этот раз объект Encoder создается на базе кодировки UTF-8. Unicode также используется и для декодирования, и на этот раз нужно закодировать символьные данные в корректный байтовый формат, прежде чем его можно будет записать в поток. Метод GetBytes () - место, где происходит вся магия. Он преобразует символьный массив в байтовый массив. GetBytes () принимает символьный массив в качестве первого параметра (charData в рассматриваемом примере) и индекс, указывающий на начало массива, в качестве второго параметра (О - для начала массива). Третий параметр- количество символов, подлежащих преобразованию (charData . Length - количество элементов в массиве charData). Четвертый параметр - байтовый массив, в который нужно поместить данные (byData), а пятый параметр - индекс, указывающий на начало записи в байтовом массиве (О - для начала массива byData).

Шестой и последний параметр определяет, должен ли объект Encoder сбрасывать свое состояние после завершения работы. Это отражает тот факт, что объект Encoder запоминает место в памяти, где он остановился в байтовом массиве. Это предназначено для последовательных вызовов объекта Encoder, но бессмысленно при единственном его вызове. Финальный вызов Encoder должен установить этот параметр в true, чтобы очистить его память и освободить объект для сборки мусора.

После этого остается лишь записать байтовый массив в FileStream, используя метод Write ():

aFile.3еек(0, SeekOrigin.Begin); aFile.Write(byData, 0, byData.Length);

Объект StreamWriter

Работа с массивами байт не приводит в восторг большинство людей; имея дело с объектом FileStream, вы можете предположить существование другого пути. И действительно: получив объект FileStream, вы обычно помещаете его в оболочку StreamWriter или StreamReader и используете его методы для манипулирования файлом. Если возможность переставлять файловый указатель в произвольную позицию не нужна, эти классы значительно облегчают работу с файлами.

Класс StreamWriter позволяет записывать символы и строки в файл, оставляя классу внутреннее преобразование и запись объекта FileStream.

Существует много способов создания объекта StreamWriter. Если объект FileStream уже имеется, можно использовать следующее для создания StreamWriter:

FileStream aFile = new FileStream( Log.txt , FileMode.CreateNew); StreamWriter sw = new StreamWriter(aFile);

Объект StreamWriter можно также создать непосредственно из файла:

StreamWriter sw = new StreamWriter( Log.txt , true);

Этот конструктор принимает имя файла и булевское значение, которое специфицирует, следует ли дописывать файл или создать новый.

□ Если оно установлено в false, создается новый файл, или же существующий файл усекается до нулевого размера, а затем открывается.

□ Если оно установлено в true, файл открывается, и его данные сохраняются. Если файла нет, он создается.

В отличие от создания объекта FileStream, создание StreamWriter не предоставляет аналогичного набора опций. Помимо булевского значения для дописывания или создания нового файла, нет возможности специфицировать свойство FileMode, как это делалось с классом FileStream. Не имея возможности установить свойство



FileAccess, вы всегда имеете привилегии чтения/записи файла. Чтобы использовать любые из расширенных параметров, их сначала потребуется специфицировать в конструкторе FileStreeam, а затем создать StreamWriter из объекта FileStream, как это показано в следующем практическом занятии.

Выходной поток

1. Создайте консольное приложение по имени StreamWriter и сохраните его в каталоге С:\BegVCSharp\Chapter24.

2. Вы снова будете использовать пространство имен System. 10, поэтому добавьте следующую директиву using в начало файла Program, cs:

using System;

using System.Collections.Generic; using System.Linq; using System.Text; using System.lO;

3. Добавьте следующий код в метод Main (): static void Main(string[] args)

FileStream aFile = new FileStream( Log.txt , FileMode.OpenOrCreate); StreamWriter sw = new StreamWriter (aFile); bool truth = true;

Записать данные в файл.

sw.WriteLine( Hello to you. );

sw.WriteLine( It is now {0} and things are looking good. ,

DateTime.Now.ToLongDateString0);

sw.Write( More than that, );

sw.Write( Its {0} that C# is fun. , truth);

sw.Close 0;

catch(lOException e) {

Console.WriteLine( An 10 exception has been thrown! ); Console.WriteLine(e.ToString()); Console.ReadLine(); return;

4. Соберите и запустите проект. Если никаких ошибок не будет найдено, он должен быстро отработать и закрыться. Поскольку на консоли ничего не отображается, то и смотреть тут особо не на что.

5. Перейдите в каталог приложения и найдите файл Log.txt. Он расположен в папке StreamWrite\bin\Debug, так как указывался относительный путь.

6. Откройте файл. Вы должны увидеть то, что показано на рис. 24.4.



2 Log Notepad

Hto вт ИхтЛ Vtew Неф

Hello to you.

It is now Friday, November 09, 2007 and things are looking good. More than that, its True that C# is fun.

Puc. 24.4. Результирующий файл Log, txt

Описание полученных результатов

Это простое приложение демонстрирует два наиболее важных метода класса StreamWriter - Write () и WriteLine (). Оба они имеют множество перегруженных версий для выполнения более развитого файлового вывода, но в этом примере используется базовый вывод строк.

Метод WriteLine () пишет переданную строку, немедленно дополняя ее символом новой строки. Вы можете видеть в примере, что это заставляет следующую операцию записи начинаться с новой строки.

Точно так же, как вы пишете форматированный вывод на консоль, это можно делать и при записи в файл. Например, вы можете вывести значения переменных в файл, используя стандартные параметры формата:

SW.WriteLine( It is now {0} and things are looking good. , DateTime.Now.ToLongDateString0);

DateTime .Now хранит текущую дату; метод ToLongDateString () используется для преобразования этой даты в легко читаемую форму.

Метод Write () просто пишет переданную строку в файл без добавления символа новой строки, позволяя записывать целые предложения или абзацы с использованием дополнительных операторов Write ():

sw.Write( More than that, );

sw.Write( its {0} that C# is fun. , truth);

Здесь, опять-таки, применяются параметры формата - на этот раз с вызовом Write О , - чтобы отобразить булевское значение truth; вы устанавливаете эту переменную в true ранее, и ее значение при форматировании автоматически преобразуется в строку True .

Метод Write () и параметры формата можно использовать для записи разделенных запятыми полей:

[06beKT Streain7riter] .Write( {0}, {1}, {2} , 100, А nice product , 10.50);

В более сложном примере данные могли бы поступать из базы данных или другого источника.

Объект StreamReader

Входные потоки используются для чтения данных из внешних источников. Часто это бывает файл на диске или где-то в сети, но помните, что этот источник может быть почти чем угодно, что посылает данные, например, сетевым приложением, Web-службой или даже консолью.

Класс StreamReader - это то, что вы будете применять для чтения данных из файлов. Подобно классу StreamWriter, это обобщенный класс, который может использоваться с любым потоком. В следующем практическом занятии вы снова сконструируете объект FileStream, который будет указывать на правильный файл.



1 ... 245 246 247 [ 248 ] 249 250 251 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика