Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Демонстрирование двоичного ввода-вывода





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

using System;

using System.IO;

class RWData

{

static void Main()

{

BinaryWriter dataOut;

BinaryReader dataIn;

int i = 10;

double d = 1234.12;

bool b = true;

string str = "Это тест";

//открыть файл для вывода

try

{

dataOut = new BinaryWriter(new FileStream("testdata.txt", FileMode.Create));

}

catch (IOException exc)

{

Console.WriteLine("Ошибка открытия файла:\n" + exc.Message);

return;

}

//записать данные в файл

try

{

Console.WriteLine("Запись " + i);

dataOut.Write(i);

Console.WriteLine("Запись " + d);

dataOut.Write(d);

Console.WriteLine("Запись " + b);

dataOut.Write(b);

Console.WriteLine("Запись " + 12.2 * 7.4);

dataOut.Write(12.2 * 7.4);

Console.WriteLine("Запись " + str);

dataOut.Write(str);

}

catch (IOException exc)

{

Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message);

}

finally

{

dataOut.Close();

}

Console.WriteLine();

// А теперь прочитать данные из файла.

try

{

dataIn = new BinaryReader(new FileStream("testdata", FileMode.Open));

}

catch (IOException exc)

{

Console.WriteLine("Ошибка открытия файла:\n" + exc.Message);

return;

}

try

{

i = dataIn.ReadInt32();

Console.WriteLine("Чтение " + i);

d = dataIn.ReadDouble();

Console.WriteLine("Чтение " + d);

b = dataIn.ReadBoolean();

Console.WriteLine("Чтение " + b);

d = dataIn.ReadDouble();

Console.WriteLine("Чтение " + d);

str = dataIn.ReadString();

Console.WriteLine("Чтение " + str);

}

catch (IOException exc)

{

Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message);

}

finally

{

dataIn.Close();

}

}

}

Запись 10

Запись 1023.56

Запись True

Запись 90.28

Запись Это тест

Чтение 10

Чтение 1023.56

Чтение True

Чтение 90.28

Чтение Это тест

 

Если просмотреть содержимое файла;, который получается при выполнении этой программы, то можно обнаружить, что он содержит данные в двоичной, а не в удобочитаемой текстовой форме.

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

/* Использовать классы BinaryReader и BinaryWriter для

реализации простой программы учета товарных запасов. */

using System;

using System.IO;

class Inventory

{

static void Main()

{

BinaryWriter dataOut;

BinaryReader dataIn;

string item; // наименование предмета

int onhand; // имеющееся в наличии количество

double cost; // цена

try

{

dataOut = new BinaryWriter(new FileStream("inventory.dat", FileMode.Create));

}

catch (IOException exc)

{

Console.WriteLine("He удается открыть файл " +

"товарных запасов для вывода");

Console.WriteLine("Причина: " + exc.Message);

return;

}

// Записать данные о товарных запасах в файл.

try

{

dataOut.Write("Молотки");

dataOut.Write(10);

dataOut.Write(3.95);

dataOut.Write("Отвертки");

dataOut.Write(18);

dataOut.Write(1.50);

dataOut.Write("Плоскогубцы");

dataOut.Write(5);

dataOut.Write(4.95);

dataOut.Write("Пилы");

dataOut.Write(8);

dataOut.Write(8.95);

}

catch (IOException exc)

{

Console.WriteLine("Ошибка записи в файл товарных запасов");

Console.WriteLine("Причина: " + exc.Message);

}

finally

{

dataOut.Close();

}

Console.WriteLine();

// А теперь открыть файл товарных запасов для чтения.

try

{

dataIn = new BinaryReader(new FileStream("inventory.dat", FileMode.Open));

}

catch (IOException exc)

{

Console.WriteLine("He удается открыть файл " +

"товарных запасов для ввода");

Console.WriteLine("Причина: " + exc.Message);


return;

}

// Найти предмет, введенный пользователем.

Console.Write("Введите наименование для поиска: ");

string what = Console.ReadLine();

Console.WriteLine();

try

{

for (;;)

{

// Читать данные о предмете хранения.

item = dataIn.ReadString();

onhand = dataIn.ReadInt32();

cost = dataIn.ReadDouble();

// Проверить, совпадает ли он с запрашиваемым предметом.

// Если совпадает, то отобразить сведения о нем.

if (item.Equals(what, StringComparison.OrdinalIgnoreCase))

{

Console.WriteLine(item + ": " + onhand + " штук в наличии. " +

"Цена: {0} за штуку", cost);

Console.WriteLine("Общая стоимость по наименованию <{0}>: {1}.",

item, cost * onhand);

break;

}

}

}

catch (EndOfStreamException)

{

Console.WriteLine("Предмет не найден.");

}

catch (IOException exc)

{

Console.WriteLine("Ошибка чтения из файла товарных запасов");

Console.WriteLine("Причина: " + exc.Message);

}

finally

{

dataIn.Close();

}

}

}

Обратите также внимание на то, как в этой программе обнаруживается конец файла. Методы двоичного ввода генерируют исключение EndOfStreamException по достижении конца потока, и поэтому файл читается до тех пор, пока не будет найден искомый предмет или сгенерировано данное исключение. Таким образом, для обнаружения конца файла никакого специального механизма не требуется.







Date: 2015-09-02; view: 386; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.014 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию