русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Двійкові потоки


Дата додавання: 2015-01-08; переглядів: 914.


 

Двійкові файли зберігають дані в тому ж вигляді, в якому вони представлені в оперативній пам'яті, тобто у внутрішній формі представлення. Двійкові файли застосовуються не для перегляду їх людиною, а для використання в програмах. Вихідний потік BinaryWriter підтримує довільний доступ, тобто є можливість виконувати запис в довільну позицію двійкового файлу.

Двійковий файл відкривається на основі базового потоку, який найчастіше використовує потік FileStream.

Основні методи двійкових потоків приведені в таблицях 11.8 і 11.9.

 

Таблиця 11.8

Найбільш важливі елементи класу BinaryWriter

 

Елемент Опис
BaseStream Базовий потік, з яким працює об'єкт ВinaryWriter
Close Закрити потік
Flush Очистити буфер
Seek Встановити позицію в потоці
Write Записати значення в потік

 

Таблиця 11.9

Найбільш важливі елементи класу BinaryReader

 

Елемент Опис
BaseStream Базовий потік, з яким працює об'єкт BinaryReader
Close Закрити потік
PeekChar Повернути наступний символ без переміщення внутрішнього покажчика в потоці
Read Рахувати потік байтів або символів і зберегти в масиві
ReadXXXX Рахувати з потоку дані певного типу (наприклад, Readboolean, Readbyte, ReadInt32 і т. д.)

 

У лістингу 11.7 приведений приклад формування двійкового файлу. У файл записується послідовність дійсних чисел, а потім для демонстрації довільного доступу третє число замінюється числом 8888.

 

Лістинг 11.7. Формування двійкового файлу

using System;

using System.IO;

namespace examp81

{

class Class1

{

static void Main()

{

try

{

BinaryWriter fout = new BinaryWriter(

new FileStream(@"D:\1.txt", FileMode.Create));

double d = 0;

while ( d < 4 )

{

fout.Write( d );

d += 0.33;

};

fout.Seek( 16, SeekOrigin.Begin ); // другий елемент файлу

fout.Write( 8888d );

fout.Close();

}

catch( Exception e )

{

Console.WriteLine( "Error: " + e.Message );

return;

}

}

}

}

При створенні двійкового потоку в нього передається об'єкт базового потоку. При установці покажчика поточної позиції у файлі враховується довжина кожного значення типу doublе - 8 байт.

У лістингу 11.8 приводиться програма, яка за допомогою екземпляра Binaryreader прочитує вміст файлу в масив дійсних чисел, а потім виводить цей масив на екран.

При читанні береться до уваги, що метод ReadDoublе при виявленні кінця файлу генерує виключення EndOfStreamException. Оскільки в даному випадку це не помилка, тіло обробника виключень порожнє.

 

Лістинг 11.8. Читання двійкового файлу

using System;

using System.IO;

namespace examp82

{

class Class1

{

static void Main()

{

try

{

FileStream f =

new FileStream( @"D:\1.txt", FileMode.Open );

BinaryReader fin = new BinaryReader( f );

long n = f.Length / 8; // кількість чисел у файлі

double[] х = new double[n];

long i = 0;

try

{

while (true) х[i++] = fin.ReadDouble(); // читання

}

catch ( EndOfStreamException e ) {}

foreach (double d in х) Console.Write(" " + d); // виведення

fin.Close();

f.Close();

}

catch ( FileNotFoundException e )

{

Console.WriteLine( e.Message );

Console.WriteLine( " Перевірте правильність імені файлу!" );

return;

}

catch ( Exception e )

{

Console.WriteLine( "Error: " + e.Message );

return;

}

}

}

}

Результат роботи програми:

 

0 0,33 8888 0,99 1,32 1,65 1,98 2,31 2,64 2,97 3,3 3,63 3,96

 


<== попередня лекція | наступна лекція ==>
Потоки символів | Робота з каталогами і файлами


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн