Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 264

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 258 259 260 261 262 263 < 264 > 265 266 267 268 269 270 .. 404 >> Следующая


Запись данных

Процесс записи данных в файл с произвольным доступом совершенно аналогичен. Сначала необходимо создать байтовый массив; наиболее простой способ достигнуть этого — создать сначала символьный массив, который мы собираемся записывать в файл. Затем следует воспользоваться объектом Encoder, позволяющим преобразовать его в массив байтов; использование этого объекта очень напоминает использование объекта Decoder. В завершение необходимо вызывать метод write о, который и запишет информацию в файл.

Давайте создадим простой пример, который позволит продемонстрировать, каким образом это выполняется.

Практинум: запись данных в файл с произвольным доступом

1. Создайте новый проект. Выберите пункт меню C# Console Application и назовите его WriteFile.

2. Как и в предыдущем случае, вставьте в начало файла ciassl.cs следующие два описания пространств имен:

using System;. using System.ХО; ueing System.Text;
566

Глава 20

3. Добавьте в метод Main о следующий код:

static void Main(string[] args)

(

byte[] byData = new byte[100]; chart] charData * new Char[100];

try

{

Filestream aFile = new FileStream(*Temp, tjfb',FileMode.OpenOrCreate) j char Dal ¦ "Hello Wo rid', ToCharArray О j Encoder e « Encoding.UTP8.GetEncoder(); e.GetBytes(chorData,0,charData.Length, byDato,0,true)j

II Перемещение указателя файла а самое начало файла aFile,Seek(0,SeekOrigin.Begin); aFile.Write(byData,0,byData.Length);

>

catch(IOException ex)

{

Console. WrjteLini 'An 10 exception has been thrown!'))

Console.WriteLinefex.ToStringO } i

Console.ReadLine() ;

return;

return;

1 hQ Tc mp.l hI - No t epott BSD
j - , . , „
Aiello world T#
¦A

1. Запустите приложение. Оно будет выполняться некоторое время, а затем завершится,

i. Перейдите в директорию приложения — файл будет сохранен именно в ней, поскольку мы используем относительный путь. Файл будет помещен В папку WriteFile\bin\Debug. Откройте файл Temp.txt. Вы сможете обнаружить в файле текст, приведенный на рисунке слева.

Как это работает — Запись данных в файл с произвольным доступом

Данное приложение открывает файл в своей собственной директории и записывает в него несложную строку. Все это происходит аналогично предшествующему примеру.

Следующая строка создает символьный массив с помощью статического метода TocharArray () класса string. Поскольку в C# все можно рассматривать п качестве объекта, а текст 'Hello world' на самом деле представляет собой объект string, то эти методы могут вызываться даже для обычной строки символов;

charData = 'Hello World'.ToCharArray();

Из следующих строк становится понятным, каким образом можно преобразовать массив символов в соответствующий массив байтов, который требуется объекту Filestream.

Encoder е = Encoding.UTF8.GetEncoder();

e.GetBytes(charData,0,charData.Length, byDate,0,true;
Работа с файлами

567

На этот раз мы создаем объект Encoder, который также основывается на кодировке UTF8. В данном случае для выполнения перекодировки также используется кодировка Unicode, однако на этот раз нам необходимо перекодировать символьные данные в корректный байтовый формат, прежде чем у нас появится возможность записать информацию в поток. Это совершается в методе GetBytesd. В нем происходит преобразование символьного массива в байтовый. Этому истоду в качестве первого параметра передается символьный массив, а в качестве второго — индекс элемента, с которого следует начинать преобразование^ В качестве третьего

¦ * параметра этому методу передается количество символов, подлежащих преобразованию; в качестве четвертого — байтовый массив, в котором должна размещаться информация после преобразования, и в качестве пятого — индекс элемента, с которого начинается заполнение байтового массива. Последний параметр определяет, должен ли объект Encoder обновлять свое состояние после окончания работы. Это имеет отношение к тому факту, что объект Encoder сохраняет в памяти то место, на котором была прекращена запись в байтовый массив, Это оказывается весьма полезным при осуществлении последовательных обращений к объекту Encoder, но оказывается совершенно бессмысленным в случае единственного обращения к нему, Прн завершающем обращении к объекту Encoder этому параметру должно быть присвоено значение true, означающее, что память должна быть очищена, а объект освобожден для процедуры сборки мусора.

После выполнения всех этих действии запись байтового массива в объект Filestream посредством метода write о не представляет никаких трудностей:

aFile.Seek(0,SeekOrigin,Begin);

aFile.WritefbyData,0,byData.Length);

Объект StreamWriter

Работа с объектом Filestream достаточна сложна, поэтому может возникнуть вопрос, нет ли какого-либо более простого способа. Не стоит беспокоиться — обычно вся работа с объектом Filestream оказывается скрытой от пользователя за счет работы с объектами streamwriter и streamReader и использования их методов для выполнения манипуляций над файлами. Если перед вами не стоит задача перемещать указатель файла на произвольную позицию, то здесь эти классы позволяют значительно упростить работу с файлами. Класс streamwriter позволяет осуществлять запись в файл символов и строк, он самостоятельно выполняет все необходимые преобразования и производит запись в объект Filestream.
Предыдущая << 1 .. 258 259 260 261 262 263 < 264 > 265 266 267 268 269 270 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.