Lektsiya_po_faylam_u_S.ppt
- Количество слайдов: 27
Робота з файлами у С++ 06. 11. 2012
Потоки для роботи з файлами створюються як об’єкти наступних класів: n ofstream - для виведення (запису) даних у файл; n ifstream - для введення (читання) даних із файлу; n fstream - для читання і для запису даних (двонаправлений обмін).
Файлове введення/виведення аналогічне стандартному вводу/виводу, єдина відмінність - це та, що введення / виведення виконуються не на екран, а в файл. Якщо введення/виведення на стандартні пристрої виконується за допомогою об'єктів cin і cout, то для організації файлового введення/виводу достатньо створити власні об'єкти, які можна використовувати аналогічно операторам cin і cout.
Наприклад, необхідно створити текстовий файл та записати в нього рядок «Робота з файлами в С + +» . Для цього необхідно виконати наступні кроки: n створити об'єкт класу ofstream; встановити зв'язок об'єкту класу з файлом, у який проводитиметься запис; n записати рядок у файл; n закрити файл. n Чому необхідно створювати об'єкт класу ofstream, а не класу ifstream?
/ / Створюємо об'єкт для запису в файл ofstream / * ім'я об'єкта * /; / / об'єкт класу ofstream Назвемо об'єкт - fout: ofstream fout; Об'єкт необхідний, щоб можна було виконувати запис у файл. Вже об'єкт створений, але не пов'язаний з файлом, у який потрібно записати рядок. fout. open ("cppstudio. txt"); / / зв'язуємо об'єкт з файлом Через операцію точка отримуємо доступ до методу класу open (), в круглих дужках якого вказуємо ім'я файлу. Вказаний файл буде створений в поточній директорії з програмою. Якщо файл з таким ім'ям існує, то існуючий фал буде замінено новим.
Запис у файл потрібного рядка: fout << "Робота з файлами в С + +"; / / запис рядка в файл Використовуючи операцію передачі в потік спільно з об'єктом fout рядок Робота з файлами в С + + записується у файл. Так як більше немає необхідності змінювати вміст файлу, його потрібно закрити, тобто відокремити об'єкт від файлу. fout. close (); / / закриваємо файл
В одному рядку можна створити об'єкт і встановити зв'язок його з файлом. ofstream fout ("cppstudio. txt"); / / створюємо об'єкт класу ofstream і пов'язуємо його з файлом cppstudio. txt
Для того щоб прочитати файл знадобитися виконати ті ж кроки, що й при записі у файл з невеликими змінами: nстворити об'єкт класу ifstream і пов'язати його з файлом, у який проводитиметься запис; nпрочитати файл; nзакрити файл.
в С + + передбачена функція - is_open (), яка повертає цілі значення: 1 - якщо файл був успішно відкритий, 0 - якщо файл відкритий не був. Доцільно писати перевірку: if (!fin. is_open()) // если файл не открыт cout << "Файл не може бути відкритим!n"; else { робота з файлом }
У класах ifstream, ofstream, fstream визначені конструктори, що дозволяють по-іншому виконувати створення та відкриття файлів. Типи конструкторів для потоків різних класів дуже схожі: імя_класу (); створює поток, не приєднуючи його до жодного файлу; імя_класу (int fd); створює поток і приєднує його до вже відкритого файлу, дескриптор якого використовується в якості параметра fd; імя_класу (int fd, char * buf, int); створює поток, приєднуючи його до вже відкритого файлу з дескриптором fd, і використовує явно заданий буфер (параметр buf); імя_класу (char * File. Name, int mode, int =. . . ); створює поток, приєднує його до файлу з заданим ім'ям File. Name, а при необхідності попередньо створює файл з таким ім'ям.
Працюючи із засобами бібліотечних класів введення/виведення, найчастіше вживають конструктор без параметрів і конструктор, в якому явно задано ім'я файлу. Приклади звернень без параметрів: n ifstream fi; // Створює вхідний файловий поток fi. n оstream fo; // Створює вихідний файловий поток fo. n fstream ff; // Створює файловий поток введеннявиведення ff.
Звернення з параметрами: Після виконання кожного із цих конструкторів файловий поток можна приєднати до конкретного файлу, використовуючи вже згадану компонентну функцію open (): void open (char * File. Name, int режим, int захист);
приклади: fi. open ("File 1. txt", ios : : in); // Поток fi з'єднаний з файлом File 1. txt. fi. close (); // розірвали зв'язок потоку fi з файлом File 1. txt. fi. open ("File 2. txt"); // Потік fi приєднаний до файлу File 2. txt. fо. open ("New. File"); // Потік fo приєднується до файлу New. File; // якщо такий файл відсутній - він буде створений.
Режими роботи з файлом void open (char * File. Name, int режим, int захист); визначені у заголовному файлі fstream. h: n ios: : app n ios: : ate n ios: : binary n ios: : in n ios: : nocreate n ios: : noreplace n ios: : out n ios: : trunc Можна комбінувати два і більше з цих значень, використовуючи побітове АБО
Режими роботи з файлом Константа Опис ios_base: : in відкрити файл для читання ios_base: : out відкрити файл для запису ios_base: : ate при відкритті перемістити покажчик в кінець файлу ios_base: : app відкрити файл для запису в кінець файлу ios_base: : trunc видалити вміст файлу, якщо він існує ios_base: : binary відкриття файлу в двійковому режимі
Режими відкриття файлів можна встанов-лювати безпосередньо при створенні об'єкта або при виклику функції open (). ofstream fout ("cppstudio. txt", ios_base: : app); // відкриваємо файл для додавання інформації до кінця файлу fout. open ("cppstudio. txt", ios_base: : app); // відкриваємо файл для додавання інформації до кінця файлу
void open (char * File. Name, int режим, int захист); Визначає, яким чином здійснюється доступ до файлу. Значення атрибуту файлів визначаються таким чином: Атрибут значення 0 Нормальний файл, відритий доступ Файл тільки для читання прихований файл 1 2 4 8 системний файл архівний файл
У фрагменті відкривається нормальний файл для виведення: ofstream out; out. open ( "test", ios: : out, 0); out. open ("test"); // значення за замовчуванням для виведення і нормального файлу
Для того, щоб відкрити потік одночасно для введення і виведення, необхідно задати обидві величини ios: : in і ios: : out для режиму: fstream mystream; mystream. open("test", ios: : in|ios: : out);
Читання і запис в текстові файли Для того, щоб писати в текстові файли або читати з них, достатньо скористатися операторами << і >> для відкритого потоку. Наприклад, наступна програма записує ціле число, число з плаваючою комою і рядок у файл TEST:
Наступна програма читає ціле число, число з плаваючою комою, символ і рядок з файлу, створеного попередньою програмою:
Розробимо програму, яка, використовуючи операцію sizeof (), буде обчислювати характеристики основних типів даних в С++ і записувати їх у файл- характеристики: n n n число байт, що відводиться під тип даних максимальне значення, яке може зберігати певний тип даних. Запис у файл повинна виконуватися в такому форматі 1 2 3 4 5 6 7 8 9 1 /* data type byte max value bool = 1 255. 00 char = 1 255. 00 short int = 2 32767. 00 unsigned short int = 2 65535. 00 int = 4 2147483647. 00 unsigned int = 4 4294967295. 00 long int = 4 2147483647. 00 unsigned long int = 4 4294967295. 00 0 float = 4 2147483647. 00 1 double = 8 9223372036854775800. 0 1 */ 1 2
Створити програму що має три функції void main() { clrscr(); Create. File(); //записує рядка в файл Read. File(); //читає рядок з файлу і виводить на екран getch(); }
Lektsiya_po_faylam_u_S.ppt