Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 14
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

База данных студентов на Delphi + Microsoft SQL Server
Моделирование интернет кафе на GPSS + Отчет
Расчет размера дохода на одного человека в Turbo Pascal

Двоичные файлы
Вывод в двоичный файл обычно выполняется методом wri te(), который мы уже рассматривали, изучая вывод символов и строк. Все же обычно с его помощью выводят как раз не символы, а данные других типов. Метод имеет прототип
ostream& write(const char *str, streamsize count):



Метод записывает count символов символьного массива str в поток данных. Тип streamsize (см. п. п. 27.4.1 в [11) обычно представляет собой знаковую версию si ze_t. Никакие символы-ограничители не влияют на вывод. Метод возвращает ссылку на поток, поэтому после операции можно проверить состояние потока.
Путем преобразования указателей можно вывести в выходной двоичный поток значение переменной любого типа, например:
int i = 5;
to.write((char *)&i, sizeof(i)); TMoney d(200.56);
to.write(reinterpret_cast<char *>(&d), sizeof(TMoney)); Можно вывести и массив, например: long t[10]:
to.write((char *)&t[0], sizeof(t));



Ввод из двоичных файловых потоков делается методом read О, который имеет такой же прототип:
istream& read(char *str, streamsize count);



Метод читает count символов в символьный массив str. Размер символьного массива должен быть достаточным, чтобы вместить count символов. Метод возвращает ссылку на поток, поэтому после операции можно проверить состояние потока. Никакие символы-разделители и символы-завершители не влияют на ввод. Если обнаружен конец файла, то устанавливаются флаги eof bi t и f ai Ibi t.
Путем преобразования указателей можно ввести из входного двоичного потока значение переменной любого типа, например:
int ii; TMoney dd;
from.read((char *)&ii, sizeof(ii));
from.read(reinterpret_cast<char *>(&dd). sizeof(TMoney)); long t[10];
from.read((char *)&t[0], sizeof(t));



Существует еще один метод ввода, имеющий следующий прототип (см. п. п. 27.6.1.3 в [1]):
streamsize readsome(char *str, streamsize count);



Метод работает аналогично методу read(), но возвращает не ссылку на поток, а количество введенных символов.
Теперь легко написать программы обработки двоичных файлов. В первом примере мы создаем два двоичных файла из одного массива (листинг 14.7). Для сохранения двоичных файлов нужно создать на диске С каталог BinFiles.

Листинг 14.7. Создание и обработка двоичных файлов
#include <fstream> #include <iostream> #include <ctime> using namespace std; int main() { int m[10]={0};
srand((unsigned)time(NULL)); // инициапизация датчика случайных чисел
/* заполняем массив m числами */
for(int i = 0; i < 10; i++)
{ m[i] = rand()%10;
cout << m[i] << ' '; // контрольный вывод на экран
}
cout << '\n' ;
/* открываем файл для записи */ ofstream outstrm ("c:/binfiles/oonumberl.bin", std::ios::binary); if(outstrm.is_open())
{ for(int i =0; i < 10; i++) // выводим массив в файл поэлементно outstrm.write((char *)&m[i], sizeof(int)); outstrm.close();
}
/* открываем другой файл для записи */
outstrm.open("с:/binfiles/oonumber2.bin", std::ios::binary); if(outstrm.is_open())
{ outstrm.write((char*)m, sizeof(m)); // выводим массив в файл outstrm.close();
}
// вывод двоичного файла на экран
// открываем второй файл для чтения
{ ifstream instrm ("c:/binfiles/oonumber2.bin", std::ios::binary); int a = 0;
// читаем числа по одному из файла и выводим while(instrm.read((char *)&а, sizeof(int)))
cout << a << ' * ; cout << '\n' ;
}
// открываем первый файл для чтения
ifstream instrm ("c:/binfiles/oonumberl.bin", std::ios::binary); int t[10] = {0};
instrm.read((char *)t, sizeof(t)); // чтение файла в массив
instrm.close(); // закрываем
for(int i = 0; i < 10; i++)
cout << t [I] << ' ' ; cout << '\n' ; char ch = getchar(); return 0; }



В этом примере два двоичных файла из одного массива создаются разными способами: в файл oonumber1.bin массив выводится поэлементно, а в файл oonumber2.bin — сразу целиком одним оператором. Если мы заглянем в каталог BinFiles, то увидим, что эти два файла имеют одинаковый размер в 40 байт.
Затем те же файлы открываются как входные, читаются и выводятся на экран. Сначала открывается файл oonumber2.bin (в который мы писали массив целиком), и чтение из него выполняется по одному числу. Нетрудно вместо вывода на экран выполнять в цикле, например, суммирование чисел, записанных в этот файл.
Если вас интересует программирование Lotus или http://www.cyberforum.ru/lotus/ тогда вам на киберфорум.

Первый файл oonumber1.bin, который записывался в цикле по одному числу, читается сразу целиком в массив t одним оператором, и поток тут же закрывается. И снова мы наблюдаем на экране, что чтение выполнено совершенно правильно. Такое «смешение» для двоичных файлов безопасно, так как и в памяти, и на диске размеры данных равны si zeof (тип) п, где п — количество элементов, участвующих в обмене.
Опубликовал Kest March 26 2014 21:23:02 · 0 Комментариев · 3427 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Программирование ...
IPAddresseEdit
База предприятий ...
PDJXPPack
Pro-Download Sys...
Ильдар Хабибуллин...
Ics
NotePad Pro [Исхо...
ATComponents
Прграммирование в...
Графика в проекта...
Советы по Delphi
ИНТЕРНЕТ ПРОГРАММ...
Работа с базами д...
ScreenSaver [Исхо...
Философия C++. Пр...
Панель случайной ...
Delphi 2006 - Спр...
EditButton
Turbo Pascal for ...

Топ загрузок
Приложение Клие... 100786
Delphi 7 Enterp... 97971
Converter AMR<-... 20291
GPSS World Stud... 17043
Borland C++Buil... 14210
Borland Delphi ... 10356
Turbo Pascal fo... 7385
Калькулятор [Ис... 6062
Visual Studio 2... 5220
Microsoft SQL S... 3672
Случайные статьи
Аутентификация в с...
Внешние проверки
Аудит также позвол...
Символы в В PowerS...
Разрешение дублиро...
Почтовый конверт
Циклические коды и...
Списки управления ...
Функция GetDriverN...
присвоения чрезмер...
Билеты на автобус
Время выполнения S...
Протоколы распреде...
Рис. 1.25. Ручное ...
Открытие существую...
Продвижение сайтов...
Членам групп не да...
Абстрактная точка ...
Пример программы —...
Функции-операции п...
Элитная водка Belu...
Официальный сайт С...
Манипулирование би...
Список идентификат...
Повторное использо...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?