Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Топ:
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Дисциплины:
2022-10-10 | 23 |
5.00
из
|
Заказать работу |
|
|
Текстовый файл можно сформировать и прочитать посимвольно, используя для этого методы put () и get () соответственно для записи символа в файл и чтения символа из файла.
1. #include<fstream>
2. #include<iostream>
3. usingnamespace std;
Int main()
5. { char FileName[20];
6. char Ch;
7. cout <<"Vvedite imya FILE: "; cin >> FileName;
8. fstream F;
9. F.open(FileName,ios::out);
10. for (int i=32; i<91; i++) { Ch=i; F.put(Ch); };
11. F.close();
12. cout << endl <<"FILE "<< FileName <<": \n";
13. F.open(FileName, ios::in);
14. while (F.get(Ch)){ cout << Ch; }
15. F.close();
16. cout << endl;
17. return 0;
18. }
В строке 10 организован цикл, в котором с помощью метода put () осуществляется посимвольная запись в текстовый файл. В 14 строке представлен цикл, обеспечивающий посимвольное чтение с помощью метода get () из текстового файла и вывод на консоль.
В текстовый файл можно записать и можно из него прочитать данные, используя для этого методы соответственно write () и read (). Приведем пример соответствующей программы.
1. # include < fstream >
2. # include < iostream >
3. # include < stdlib. h >
4. usingnamespace std;
Int main()
6. { char FileName[20]; char X[15];
7. cout <<"Vvedite imya FILE: "; cin >> FileName;
8. ofstream F(FileName, ios::out);
9. for (int i=0; i<3; i++)
10. { cout <<"Vvedite "<< i <<" stroku: "; cin >> X;
11. F.write(X,sizeof(X));
12. _itoa_s(i,X,4,10); F.write(X,sizeof(X));
13. _gcvt(1.0/(i+1),6, X); F.write(X,sizeof(X));
14. };
15. F.close();
16. cout << endl <<"FILE "<< FileName <<": \n";
17. ifstream P(FileName);
While (P.read(X,sizeof(X)))
19. { cout << X << endl; }
20. P.close();
21. return 0;
22. }
В программе формируется файл, в котором, как и в программах пункта 2 этой лекции, трижды записывается триада значений (символьная строка – целочисленное значение – вещественное). Операция записи в файл выполняется на основе использования метода write () (см. стр. 11-13), а считывание из файла реализовано на основе использования метода read () (см. стр. 18).
|
Отметим, что в строке 3 подключается заголовочный файл stdlib. h для использования в 12 строке функции преобразования _ itoa _ s (i, X,4,10); целочисленного значения в строковое и для использования в 13 строке функции преобразования _ gcvt (1.0/(i +1),6, X); вещественного значения в строковое.
Программой на внешнем устройстве в результате был сформирован файл со следующим содержимым:
37 Основы работы с двоичными файлами в языке С++.
Сохранять данные в файле в языке С++ можно не только в текстовом представлении, но и в двоичном формате. Текстовая форма означает, что все данные, включая числовые, сохраняются в виде текста, который можно легко просмотреть с помощью обычного текстового редактора.
Например, сохранение целочисленного значения 1234567890 в текстовом виде означает сохранение 10 символов-цифр, из которых состоит данное число. Если же сохранить это число в двоичном формате, то оно будет размещаться во внутреннем представлении, т.е. вместо символов сохраняется 32-битное представление числа типа int.
Для значения типа char двоичное представление совпадает с его текстовым — двоичным представлением (например, ASCII-код символа). Для чисел же двоичное представление кардинально отличается от их текстового представления.
У каждого формата хранения данных в файле имеются свои достоинства. Так, текстовые файлы, во-первых, легко читать и редактировать с помощью обычного текстового редактора, во-вторых, можно относительно легко переносить с одной системы на другую.
В двоичном формате вещественные числа сохраняются более точно, поскольку они сохраняются во внутреннем представлении. Обычно сохранение данных в двоичном формате происходит быстрее, поскольку при этом не выполняются соответствующие преобразования, и требуется меньше пространства для хранения (в зависимости от природы данных). Однако при переносе данных с одной систему на другую могут возникать проблемы, в случае если новая система использует другое внутреннее представление данных. При такой ситуации необходимо будет писать программу, которая будет обеспечивать требуемые преобразования данных.
|
Чтобы сохранить данные в двоичном файле можно воспользоваться методом write(). Этот метод копирует определенное число байтов из памяти в файл, причем он копирует любой тип данных байт в байт, не производя преобразования. Например, если ему передать адрес переменной типа int и указать скопировать 4 байта, то данный метод скопирует 4 байта, передав значение типа int и не производя его преобразования.
Чтобы прочесть информацию из двоичного файла нужно воспользоваться методом read() класса ifstream.
Рассмотрим пример программы, в которой создается двоичный файл. В этот файл записываются значения типа char, int, double, bool и float. Затем из файла читаются эти значения и выводятся на экран.
1. #include<fstream>
2. #include<iostream>
3. usingnamespace std;
Int main()
5. { char FileName[20];
6. char Ch='Y',Ch2; bool Bo=true,Bo2; int In=1234567890,In2;
7. double Do=123.45,Do2; float Fl=98.75,Fl2;
8. cout <<"Vvedite imya FILE: "; cin >> FileName;
9. ofstream F(FileName, ios::binary);
10. F.write((char*)&Ch,sizeof(Ch));
11. F.write((char*)&In,sizeof(In));
12. F.write((char*)&Do,sizeof(Do));
13. F.write((char*)&Bo,sizeof(Bo));
14. F.write((char*)&Fl,sizeof(Fl));
15. F.close();
16. cout << endl <<"FILE "<< FileName <<": \n";
17. ifstream P(FileName,ios::binary);
18. P.read((char*)&Ch2,sizeof(Ch2)); cout << Ch2 << endl;
19. P.read((char*)&In2,sizeof(In2)); cout << In2 << endl;
20. P.read((char*)&Do2,sizeof(Do2)); cout << Do2 << endl;
21. P.read((char*)&Bo2,sizeof(Bo2)); cout << Bo2 << endl;
22. P.read((char*)&Fl2,sizeof(Fl2)); cout << Fl2 << endl;
23. P.close();
24. return 0;
25. }
В строке 1 подключается библиотека < fstream >, внутри которой определены три класса ifstream, ofstream и fstream для работы с файлами.
В строке 5 определяется переменная FileName для размещения имени двоичного файла на внешнем устройстве.
В строках 6-7 определяются 10 переменных (5 из которых инициализируются начальными значениями) пяти различных типов.
В строке 8 выдается запрос на ввод имени файла, и осуществляется ввод имени с клавиатуры.
В строке 9 создается объект Fкласса ofstream, который ассоциируется с двоичным файлом на внешнем устройстве. Соответствующее имя файла на внешнем устройстве берется из переменной FileName.
В строках 10–14 в двоичный файл записываются пять разнотипных значений. В 15 строке файл закрывается.
|
В строке 17 создается объект Pкласса ifstream, который ассоциируется с двоичным файлом на внешнем устройстве, имя которого задается переменнойFileName.
В строках с 18 по 22 включительно с использованием метода read() считывается 5 соответствующих значений из файла. В строке 23 закрывается файл. Отметим, что при достижении конца программы автоматически закрываются все открытые в программе файле.
!!! Если в рассмотренной выше программе заменить строки:
9. ofstream F(FileName); настроку fstream F(FileName);
17. ifstream P(FileName); настроку fstream P(FileName, ios::in | ios::binary);,топрограммабудетработать.
В предыдущей программе были использованы два потока F и P. Приведем пример программы, которая использует только один поток. В процессе ее выполнения создается двоичный файл, содержащий 12 целочисленных значений сформированных случайным образом.
1. #include<fstream>
2. #include<iostream>
3. #include<stdlib.h>
4. #include<time.h>
5. usingnamespace std;
Int main()
7. { char FileName[20];
8. int S, kol_vo=12;
9. cout <<"Vvedite imya FILE: "; cin >> FileName;
10. fstream F(FileName, ios::out | ios::binary);
11. srand((unsigned)time(NULL));
12. for(int i=0; i<kol_vo; i++)
13. {S=rand(); F.write((char*)&S,sizeof(S));};
14. F.close();
15. cout << endl <<"FILE "<< FileName <<": \n";
16. F.open(FileName,ios::in | ios::binary);
17. while (F.read((char*)&S,sizeof(S))) cout << S << endl;
18. F.close();
19. return 0;
20. }
В строке 8 создается поток F типа fstream, который с помощью метода open (FileName, ios:: out | ios:: binary) поток F связывается с двоичным файлом на внешнем устройстве и устанавливается режим записи данных в этот файл. В 12-13 строках в цикле с помощью ГСЗ генерируются 12 целых чисел и записываются в двоичный файл, а в 14 строке он закрывается.
В 16 строке поток F связывается с двоичным файлом на внешнем устройстве и устанавливается режим чтения данных из этого файла. В 17 строке организован цикл, в котором последовательно происходит считывание чисел из файла и вывод их на консоль. В 18 строке файл закрывается и далее программа завершается.
|
|
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!