Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 9
На сайте нет зарегистрированных пользователей

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

Моделирование ЭВМ на GPSS (три класса заданий) + Пояснительная записка
Создание последовательности окон и передвижение окон по экрану на Turbo ...
Моделирование работы участка термической обработки шестерен на GPSS + По...

Двоичные файлы
Вывод в двоичный файл обычно выполняется методом 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 Комментариев · 3359 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
TelBook
PHP: обучение на ...
Введение в станда...
Программа рисует ...
Error mod
RxLIB
TMS
CodeGear RAD Stud...
Abbrevia
Нестандартные при...
Алгоритм трассиро...
Меню проводника в...
БД студентов
BSButton
Fig [Исходник на ...
Visual Basic for ...
PDPcheck
Игра "Астероиды" ...
ZipForge
Применение фильтр...

Топ загрузок
Приложение Клие... 100779
Delphi 7 Enterp... 97934
Converter AMR<-... 20285
GPSS World Stud... 17037
Borland C++Buil... 14206
Borland Delphi ... 10334
Turbo Pascal fo... 7381
Калькулятор [Ис... 6050
Visual Studio 2... 5214
Microsoft SQL S... 3667
Случайные статьи
Фотокниги
Содержание
Вулкан игры онлайн
эти Web-серверы не...
Процедуры и функци...
Воровство контента...
Наркологическая кл...
Строки не имеют ск...
Метод экспертного ...
Ограничения учетно...
Конфигурирование и...
Общее представление
Массивы нужно все-...
Новый корпус для ЭЛТ
Модуль Legacy
Руководство требуе...
Замечание по повод...
Вход в Windows Mes...
Совмещение имен в IDL
Модуль CRT. Управл...
Порты ТСР и UDP, н...
Структурированные ...
ДЫРЫ В ЧАТАХ
ВВЕДЕНИЕ В ОТСЕЧЕНИЕ
Зачем нужны команд...
Статистика



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


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