Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Топ:
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного хозяйства...
Интересное:
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Дисциплины:
2022-10-10 | 23 |
5.00
из
|
Заказать работу |
|
|
Пользователь имеет возможность формировать и обрабатывать двоичные файлы, компоненты которого относятся к агрегатному типу struct. Рассмотрим пример соответствующей программы.
1. # include < fstream >
2. # include < iostream >
3. usingnamespace std;
Struct avto
5. { public:
6. avto() { cena=98765; rashod=7.5; }; // конструктор
7. char marka[12];
8. int cena;
9. double rashod;
10. };
Int main()
12. { char FileName[20]; avto S;
13. cout <<"Vvedite imya FILE: "; cin >> FileName;
14. fstream F(FileName, ios::out | ios::binary);
15. for(int i=0; i<2; i++)
16. { cout << endl;
17. cout <<"Vvedite marku avto: "; cin >> S.marka;
18. cout <<"Vvedite cenu avto: "; cin >> S.cena;
19. cout <<"Vvedite rashod avto: "; cin >> S.rashod;
20. F.write((char*)&S,sizeof(S));
21. };
22. F.close();
23. cout << endl <<"FILE "<< FileName <<": \n";
24. F.open(FileName,ios::in | ios::binary);
25. while (F.read((char*)&S,sizeof(S))) cout << S.marka <<
26. " "<< S.cena <<" "<< S.rashod << endl;
27. F.close();
28. cout << endl <<"SIZE OBJECT-CLASS avto = "<<
29. sizeof (avto) << endl;
30. return 0;
31. }
В строке 1 подключается библиотека < fstream >, внутри которой определены три класса ifstream, ofstream и fstream для работы с файлами.
В строках 4-10 описывается агрегатный тип structavto, внутри которого определены явный конструктор и 3 поля.
Struct avto
5. { public:
6. avto() { cena=98765; rashod=7.5; }; // конструктор
7. char marka[12];
8. int cena;
9. double rashod;
10. };
В строке 12 определяются переменная FileName для размещения имени двоичного файла на внешнем устройстве и переменная S структурного типа avto. В строке 13 обеспечивается ввод имени двоичного файла на внешнем устройстве.
В строке 14 создается поток Fкласса fstream, который ассоциируется с двоичным файлом на внешнем устройстве (имя файла на внешнем устройстве берется из переменной FileName), и настраивается для выполнения вывода в двоичный файл.
|
В строках 15-21 организован цикл для ввода значений 3 полей структуры S и для записи 2 структурных значений в двоичный файл.
15. for(int i=0; i<2; i++)
16. { cout << endl;
17. cout <<"Vvedite marku avto: "; cin >> S.marka;
18. cout <<"Vvedite cenu avto: "; cin >> S.cena;
19. cout <<"Vvedite rashod avto: "; cin >> S.rashod;
20. F.write((char*)&S,sizeof(S));
21. };
В строке 22 закрывается файл, а в 24 – двоичный файл открывается для чтения.
В строках 25–26 организован цикл для чтения всех записей (в данном варианте программы двух записей) двоичного файл и вывода соответствующих значений на экран.
25. while (F.read((char*)&S,sizeof(S))) cout << S.marka <<
26. " "<< S.cena <<" "<< S.rashod << endl;
В строках 28-29 выводится размер структурного значения.
Прямой доступ в двоичных файлах.
Программист имеет возможность применять внутри двоичного файла прямой доступ, позиционируя внутренний файловый курсор либо относительно начала файла (beg), либо относительно текущей записи (cur).
1. #include<fstream>
2. #include<iostream>
3. usingnamespace std;
Class avto
5. { public:
6. char marka[12];
7. int cena;
8. double rashod;
9. };
Int main()
11. {
12. char FileName[20]; avto S;
13. cout <<"Vvedite imya FILE: "; cin >> FileName;
14. fstream F;
15. F.open(FileName,ios::out | ios::binary);
16. for(int i=0; i<4; i++)
17. { cout << endl;
18. cout <<"Vvedite marku avto: "; cin >> S.marka;
19. cout <<"Vvedite cenu avto: "; cin >> S.cena;
20. cout <<"Vvedite rashod avto: "; cin >> S.rashod;
21. F.write((char*)&S,sizeof(S)); };
22. F.close();
23. cout << endl <<"FILE "<< FileName <<": \n";
24. F.open(FileName,ios::in | ios::binary);
25. F.seekg(sizeof(S),ios_base::beg);
26. F.read((char*)&S,sizeof(S));
27. cout << S.marka <<" "<< S.cena <<" "<<
28. S.rashod << endl;
29. F.seekg(sizeof(S),ios_base::cur);
30. F.read((char*)&S,sizeof(S));
31. cout << S.marka <<" "<< S.cena <<" "<<
32. S.rashod << endl;
33. F.seekg(0,ios_base::beg);
34. F.read((char*)&S,sizeof(S));
35. cout << S.marka <<" "<< S.cena <<" "<<
36. S.rashod << endl;
37. F.close();
38. cout << endl <<"SIZE OBJECT-CLASS avto = "<<
39. sizeof(avto) << endl;
40. return 0;
41. }
В строке 1 подключается библиотека < fstream >, внутри которой определены три класса ifstream, ofstream и fstream для работы с файлами.
|
В строках 4-9 описывается class avto, внутри которого определены 3 поля.
Class avto
5. { public:
6. char marka[12];
7. int cena;
8. double rashod;
9. };
В строке 12 определяются переменная FileName для размещения имени двоичного файла на внешнем устройстве и объект S класса avto. В строке 13 обеспечивается ввод имени двоичного файла на внешнем устройстве.
В строке 14 создается поток Fкласса fstream, который в 15 строке ассоциируется с двоичным файлом на внешнем устройстве (имя файла на внешнем устройстве берется из переменной FileName), и двоичный файл открывается для вывода.
В строках 16-22 организован цикл для ввода значений 3 полей объекта S и для записи значений 4 экземпляров класса (объектов) в двоичный файл.
16. for(int i=0; i<4; i++)
17. { cout << endl;
18. cout <<"Vvedite marku avto: "; cin >> S.marka;
19. cout <<"Vvedite cenu avto: "; cin >> S.cena;
20. cout <<"Vvedite rashod avto: "; cin >> S.rashod;
21. F.write((char*)&S,sizeof(S)); };
22. F. close ();
В строке 23 закрывается файл, а в 24 – двоичный файл открывается для чтения.
В строке 25 реализован прямой доступ ко второму экземпляру класса в двоичном файле, поскольку ios _ base:: beg означает, что отсчет начинается с начала файла, а смещение задается выражением sizeof (S). В 26 строке считывается значение второй записи файла, и курсор внутри файла позиционируется в начале третьей записи. В 27-28 строках соответствующие значения полей второй записи выводятся на экран.
25. F.seekg(sizeof(S), ios_base::beg);
26. F.read((char*)&S,sizeof(S));
27. cout << S.marka <<" "<< S.cena <<" "<<
28. S.rashod << endl;
В строке 29 реализован прямой доступ к четвертому экземпляру класса в двоичном файле, поскольку ios _ base:: cur означает, что отсчет начинается с текущей позиции курсора в файле (в данном случае с третьей), а смещение задается выражением sizeof (S). В 30 строке считывается значение четвертой записи файла, а в 31-32 строках соответствующие значения полей выводятся на экран.
29. F.seekg(sizeof(S),ios_base::cur);
30. F.read((char*)&S,sizeof(S));
31. cout << S.marka <<" "<< S.cena <<" "<<
32. S.rashod << endl;
В строке 33 реализован прямой доступ к первому экземпляру класса в двоичном файле, поскольку ios _ base:: beg означает, что отсчет начинается с начала файла, а смещение равно 0.В 34 строке считывается значение самой первой записи файла, а в 35-36 строках соответствующие значения полей выводятся на экран.
|
33. F.seekg(0,ios_base::beg);
34. F.read((char*)&S,sizeof(S));
35. cout << S.marka <<" "<< S.cena <<" "<<
36. S.rashod << endl;
В строках 38-39 выводится размер объекта класса avto.
|
|
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!