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

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


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

static void Main(string[] args) {

byte[] byData = new byte[200]; char[] charData = new Char [200];

try {

FileStream aFile = new FileStream( ../../Program.cs , FileMode.Open)< aFile.Seek(113, SeekOrigin.Begin); aFile.Read(byData, 0, 200);

catcli (lOException e) {

Console.WriteLine ( An 10 exception lias been thrown! );

Console.WriteLine( Сгенерировано исключение ввода-вывода! );

Console.WriteLine(е.ToString());

Console.ReadKeyО;

return;

Decoder d = Encoding.UTF8.GetDecoder() ; d.GetChars(byData, 0, byData.Length, charData, 0); Console.WriteLine(charData); Console.ReadKey();

4. Запустите приложение. Результат показан на рис. 24.2.

I ril#. C:/BeQVCSherp/Chapter24 Readf itt/Readf ik- btn-Oebuy-HfaJ nt EXE

old ..lll<:.lrin.l I

bvteCI bvDat.*

Ьу1г12ИИ1:

Puc. 24.2. Результат работы приложения Re a dF ile

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

Это приложение открывает файл . cs для чтения. Оно делает это, переходя на два каталога выше по файловой структуре строкой . . в следующем операторе:

FileStream aFile = new FileStream( ../../Program.cs , FileMode.Open) ;

Два оператора, реализующих собственно поиск и чтение из определенной точки файла, выглядят так:

aFile.Seek(135, SeekOrigin.Begin); aFile.Read(byData, 0, 200);

Первая строка перемещает файловый указатель в файле на байт номер 113. Это будет буква п в namespace в файле Program, cs; предшествующие ей 113 символов - это директивы using. Вторая строка читает следующие 200 символов в байтовый массив

byData.



Обратите внимание, что эти две строки ограничены блоками try. . . catch для обработки любых исключений, которые могут быть сгенерированы:

aFile.Seek(135, SeekOrigin.Begin); aFile.Read(byData,0,100);

catch (lOException e) try

aFile.Seek(135, SeekOrigin.Begin); aFile.Read(byData, 0,100);

catch(lOException e)

Почти все операции, включающие файловый ввод-вывод, могут сгенерировать исключение типа lOException. Весь рабочий код должен содержать обработку ошибок, особенно при работе с файловой системой. Все примеры этой главы включают базовую форму обработки ошибок.

Как только вы получите массив byte из файла, нужно будет преобразовать его в символьный массив, чтобы его можно было отобразить на консоли. Для этого воспользуйтесь классом Decoder из пространства имет System.Text. Этот класс спроектирован для преобразования сырых** байт в более полезные элементы, такие как символы:

Decoder d = Encoding.UTF8.GetDecoder(); d.GetChars(byData, 0, byData.Length, charData, 0);

Эти строки создают объект Decoder на основе схемы кодирования UTF-8, которая представляет собой схему кодирования Unicode. Затем вызывается метод GetChars (), принимающий массив байт и преобразующий его в массив символов. После того, как это будет сделано, символьный массив может быть выведен на консоль.

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

Процесс записи в файл произвольного доступа очень похож. Сначала должен быть создан байтовый массив; простейший способ сделать это состоит в том, чтобы сначала построить байтовый массив, который планируется записать в файл. Затем используйте объект Encoder для преобразования его в байтовый массив, почти так же, как вы используете объект Decoder. И, наконец, вызовите метод Write () для отправки массива в файл.

Рассмотрим простой пример, демонстрирующий, как это делается.

HaS!* *! Запись данных в файл

произвольного доступа

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

2. Добавьте следующую директиву using в файл Program, cs: using System;

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



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

byte[] byData; char[] charData; try {

FileStream aFile = new FileStream( Temp.txt , FileMode.Create) charData = My pink half of the drainpipe. .ToCharArray(); byData = new byte[charData.Length]; Encoder e = Encoding.UTF8.GetEncoder() ;

e.GetBytes(charData, 0, charData.Length, byData, 0, true);

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

catch (lOException ex) {

Console.WriteLine( An 10 exception has been thrown! ); Console.WriteLine(ex.ToString()); Console.ReadKey(); return;

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

5. Перейдите к каталогу приложения - файл должен быть сохранен там, потому что применялся относительный путь. Это будет в папке WriteFile\bin\Debug. Откройте файл Temp.txt. Вы должны увидеть в файле текст, как показано на рис. 24.3.

* Temp Notepad

т Edit Format Vtow НЦр

My pink half of the drainpipe.Г

Рис. 24.3. Результирующий файл Temp, txt

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

Это приложение открывает файл в его собственном каталоге и пишет в него строку. По структуре этот пример очень похож на предыдущий, за исключением того, что используется Write () вместо Read () и Encoder вместо Decoder.

Следующая строка кода создает символьный массив с использованием статического метода ToCharArray () класса String. Поскольку все в С# является объектами, и текст My pink half of the drainpipe. - это на самом деле объект string (хотя и несколько странный), такие статические методы могут быть вызваны даже на строке символов:

CharData = My pink half of the drainpipe. .ToCharArray();

Следующие строки показывают, как преобразовать символьный массив в корректный байтовый массив, необходимый объекту FileStream:

Encoder е = Endoding.UTF8.GetEncoder();

e.GetBytes(charData, 0, charData.Length, byData, 0, true);



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

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