Работа с двоичными файлами. ТЕМА 13 презентация

Содержание

Слайд 2

Файлы по принципам работы делятся на: Текстовые Двоичные

Файлы по принципам работы делятся на:

Текстовые
Двоичные

Слайд 3

Текстовые файлы Позволяют обрабатывать информацию последовательно, от начала до конца

Текстовые файлы

Позволяют обрабатывать информацию последовательно, от начала до конца
Новую информацию можно

добавлять только в конец файла (или перезаписать файл полностью)
Содержимое файла можно отредактировать в текстовом редакторе
Слайд 4

Бинарные (двоичные) файлы Интерпретация таких файлов возлагается на специализированные программные

Бинарные (двоичные) файлы Интерпретация таких файлов возлагается на специализированные программные средства

Это

файлы, в которых информация хранится в двоичном виде, то есть во внутренней форме представления
Для них можно использовать как последовательный просмотр, так и режим прямого доступа к любой компоненте файла с заданным номером
Слайд 5

Двоичные файлы Имеют расширения dat, bin, db Обрабатываются по компонентам

Двоичные файлы

Имеют расширения dat, bin, db
Обрабатываются по компонентам
Имеют как последовательный, так

и прямой доступ к компонентам
Компонентами файла являются данные определенного типа
На каждую компоненту выделяется определенное количество байт (в соответствие с типом)
Первая компонента следует с нулевого байта от начала файла
Слайд 6

Открытие двоичного файла для чтения : ifstream fs; fs.open("file.dat", ios::binary

Открытие двоичного файла для чтения :

ifstream fs;
fs.open("file.dat", ios::binary | ios::in |

ios::nocreate );
if (!fs) {
cout<<"Ошибка открытия файла!";
return 1;
}
Эта команда «перематывает» файл в начало
Указатель файла устанавливается на начало файла
Если файл не найден, возникает исключение (ошибка выполнения)
Слайд 7

Открытие двоичного файла для записи: ofstream fs; fs.open("file.dat", ios::binary); Эта

Открытие двоичного файла для записи:

ofstream fs;
fs.open("file.dat", ios::binary);
Эта команда «перематывает» файл в

начало со стиранием информации
Указатель файла устанавливается на начало файла
Если файл не был создан, то он создается
Слайд 8

Режимы открытия двоичного файла в языке Си: Чтения (режим rb)

Режимы открытия двоичного файла в языке Си:

Чтения (режим rb)
Запись (режим wb)
Чтения

и записи (режим r+b)
Записи и чтения (режим w+b)
Слайд 9

Пример: FILE *f1; f1 = fopen("file1.bin","rb"); с проверкой открытия: FILE

Пример:

FILE *f1;
f1 = fopen("file1.bin","rb");
с проверкой открытия:

FILE *f1;
if ((f1 = fopen("file1.bin","rb"))==NULL)
{


printf("Ошибка открытия файла!");
return 1;
}
Слайд 10

Режимы открытия двоичного файла в языке С++: Чтения (ios::in) Запись

Режимы открытия двоичного файла в языке С++:

Чтения (ios::in)
Запись (ios::out)
Чтения и записи

(ios::in | ios::out)
Записи и чтения (ios::out| ios::in)
Слайд 11

Запись в двоичный файл осуществляется по одной компоненте: ofstream fs;

Запись в двоичный файл осуществляется по одной компоненте:
ofstream fs;
fs.open("file.dat", ios::binary | ios::out);
temp

= rand() % 700 - 200;
fs.write(&temp, sizeof(int));
Значение переменной temp записывается в файл вместо компоненты, на которую настроен указатель файла;
Указатель файла передвигается на следующую компоненту.
Слайд 12

Чтение из двоичного файла Осуществляется по одной компоненте: ifstream ifs;

Чтение из двоичного файла

Осуществляется по одной компоненте:
ifstream ifs;
ifs.open("file.dat", ios::binary |

ios::in);
ifs.read((char *)&temp, sizeof(int));
Одна компонента (на которую настроен указатель файла) считывается в переменную temp;
Указатель файла передвигается на следующую компоненту.
Слайд 13

Можно считывать двоичный файл последовательно: ifstream ifs; ifs.open("file.dat", ios::binary |

Можно считывать двоичный файл последовательно:
ifstream ifs;
ifs.open("file.dat", ios::binary | ios::in);
while (!ifs.eof())
{
ifs.read((char *)&temp,

sizeof(int));
cout<}
ifs.close();
Слайд 14

Режим прямого доступа для двоичных файлов fs.fseek(n*sizeof(x), fs.beg); n –

Режим прямого доступа для двоичных файлов

fs.fseek(n*sizeof(x), fs.beg);
n – номер компоненты,

на которую надо настроить указатель файла
fs.fseek(0, fs.end);
Слайд 15

Чтение компоненты с заданным номером: int i, temp; ifstream ifs;

Чтение компоненты с заданным номером:

int i, temp;
ifstream ifs;
ifs.open("file.dat", ios::binary | ios::in

| ios::out );
cin>>i;
ifs.seekp(i * sizeof(int), ifs.beg);
ifs.read((char *)&temp, sizeof(int));
cout<
Слайд 16

Запись данных с заданной позиции: int i, temp = 100;

Запись данных с заданной позиции:

int i, temp = 100;
ifstream ifs;
ifs.open("file.dat", ios::binary

| ios::in | ios::out );
cin>>i;
ifs.seekp(i * sizeof(int), ifs.beg);
ifs.write((char *)&temp, sizeof(int));
cout<
Слайд 17

Работа с двоичным файлом Открытие файла для записи, создание файла

Работа с двоичным файлом

Открытие файла для записи, создание файла в программе
Запись

в файл компонент определённого типа
Закрытие файла (сохранение)
Открытие файла для чтения (либо чтения и записи)
Чтение информации из файла в режиме последовательного или прямого доступа, поиск и выборка данных
Может быть запись измененной информации в любое место файла
Слайд 18

Открытие файла структур: struct Tovar { char name[40]; float pay;

Открытие файла структур:

struct Tovar
{ char name[40];
float pay;
}  
void

main()
{
ifstream fs;
fs.open("file.dat", ios::binary | ios::in | ios::nocreate );
if (!fs) {
cout<<"Ошибка открытия файла!";
return 1;
}
Слайд 19

Чтение и выборка данных: Tovar T = new Tovar(); while

Чтение и выборка данных:

Tovar T = new Tovar();
while (!

fs.eof()) {
ifs.read((char *)&T, sizeof(T));
if (T.pay > 30 000)
cout< }
fs.close();
system("pause");
}
Слайд 20

Задача 1 Заполнить бинарный файл случайными целыми числами. Подсчитать количество

Задача 1

Заполнить бинарный файл случайными целыми числами. Подсчитать количество четных

по значениям чисел и какой процент они составляют от общего количества компонент.
Слайд 21

Математическая формулировка: Необходимо открыть исходный файл для записи и заполнить

Математическая формулировка:

Необходимо открыть исходный файл для записи и заполнить его целыми

числами при помощи генератора случайных чисел.
Затем открыть файл для чтения и считывая его компоненты в цикле, проверять их на четность.
После выхода из цикла, зная количество четных чисел, найти процент, который они составляют.
Слайд 22

Алгоритм

Алгоритм

Слайд 23

Текст программы: void main() { srand(time(NULL)); int x; ofstream F;

Текст программы:

void main()
{
srand(time(NULL));
int x;
ofstream F;
F.open("file.dat", ios::binary);

for (int i=0; i<20; i++) {
x = rand() % 100 - 50;
F.write(&x, sizeof(int));
cout< }
F.close();
Слайд 24

Окончание программы: int k = 0; ifstream F1; F1.open("file.dat", ios::binary

Окончание программы:

int k = 0;
ifstream F1;
F1.open("file.dat", ios::binary | ios::in | ios::out

);
while (! F1.eof()) {
F1.read((char *)&x, sizeof(int));
if (x%2 == 0) k++;
}
float P = (float) k/20 * 100;
cout<<"Процент "<F1.close();
}
Слайд 25

Задача 2 Заполнить бинарный файл числами, вводимыми с клавиатуры. Количество

Задача 2

Заполнить бинарный файл числами, вводимыми с клавиатуры. Количество компонент

файла задать по желанию пользователя.
Удвоить компоненты файла с четными номерами.
Вывести на экран ещё раз содержимое файла.
Слайд 26

Алгоритм

Алгоритм

Слайд 27

Текст программы: void main() { int y, n; ofstream F1;

Текст программы:

void main()
{
int y, n;
ofstream F1;
F1.open("file.dat", ios::binary);


cout<<"Введите кол-во чисел:";
cin>>n;
for (int i=0; i cin>>y;
F1.write(&y, sizeof(int));
}
F1.close();
Слайд 28

ifstream F2; F2.open("file.dat", ios::binary | ios::in | ios::out ); for

ifstream F2;
F2.open("file.dat", ios::binary | ios::in | ios::out );
for (int i=0; i

i++) {
F2.read((char *)&y, sizeof(int));
if (y%2 == 0)
{
y *= 2;
F2.seekp(i * sizeof(int), F2.beg);
F2.write((char *)&y, sizeof(int));
}
}
F2.close();
}
Имя файла: Работа-с-двоичными-файлами.-ТЕМА-13.pptx
Количество просмотров: 69
Количество скачиваний: 0