|
Программирование >> Программирование с использованием ajax
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);
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |