- •Буферизація
- •Потоки і буфери
- •Стандартні об'єкти введення-виводу
- •Лістинг 3. Введення рядка значень
- •Результат:
- •Введення рядків із стандартного пристрою введення
- •Результат:
- •Використання функції cout.Width()
- •Результат:
- •Лістинг 15. Вывод данных с помощью фцнкции printf()
- •Результат:
- •Лістинг 16. Відкриття файлу для читання і запису
- •Результат:
- •Налаштування відкриття файлу об'єктом ofstream
- •Лістинг 17. Додавання даних в кінець файлу
- •Результат:
- •Двійкові і текстові файли
- •Лістинг 18. Запис класу у файл
- •Результат:
- •Установка параметрів введення-виводу за допомогою коммандной рядка
- •Лістинг 20. Використання аргументів командного рядка
- •Результат:
- •Питання і відповіді
Лістинг 16. Відкриття файлу для читання і запису
1: #include <fstream.h>
2: int main()
3: {
4: char fileName[80];
5: char buffer[255]; // для введення даних користувачем
6: cout << "fileName: ";
7: cin >> fileName;
8:
9: ofstream fout(fileName); // відкриття файлу для запису
10: fout << "This line written directly to the file...\n";
11: cout << "Enter text for the file: ";
12: cin.ignore(1,'\n'); // пропускає символ розриву рядка після імені файлу
13: cin.getline(buffer,255); // приймає дані, введені користувачем,
14: fout << buffer << "\n"; // і записує їх у файл
15: fout.close(); // закриває файл, після чого його знов можна відкрити
16:
17: ifstream fin(fileName); // відкривається той же файл для читання
18: cout << "Here's the contents of the file:\n";
19: char ch;
20: while (fin.get(ch))
21: cout << ch;
22:
23: cout << "\n*** End of file contents.***\n";
24:
25: fin.close(); // не забути закрити файл в кінці програми
26: return 0;
27: }
Результат:
File name: test1
Enter text for the file: This text is written to the file!
Here's the contents of the file: This line written directly to the file...
This text is written to the file!
***End of file contents.***
Аналіз: У рядку 4 створюється масив для запису імені файлу, а в рядку 5 — ще один масив для тимчасового зберігання інформації, що вводиться користувачем. У рядку 6 користувачеві пропонується ввести ім'я файлу, яке записується в масив fileName. У рядку 9 створюється об'єкт ofstream з ім'ям fout, який зв'язується з введеним раніше ім'ям файлу. В результаті відбувається відкриття файлу. Якщо файл з таким ім'ям вже існує, інформація, що міститься в нім, буде заміщена.
Рядком 10 введений текст записується прямо у файл, а в рядку 11 користувачеві знов пропонується ввести новий текст. Символ розриву рядка, що залишився в буфері після введення імені файлу, віддаляється рядком 12, після чого всі введені користувачем дані записуються в масив в рядку 13. Введений текст записується у файл разом з символом розриву рядка, а потім в рядку 15 цей файл закривається.
У рядку 17 файл відкривається заново, але на цей раз для читання, і його вміст посимвольний вводиться в програму в рядках 20—21.
Налаштування відкриття файлу об'єктом ofstream
За умовчанням при пов'язанні об'єкту ofstream з ім'ям файлу створюється новий файл з вказаним ім'ям, якщо такий не існує, або віддаляється вміст вже існуючого файлу з таким же ім'ям. Аби змінити установки за умовчанням, використовується другий аргумент конструктора об'єкту ofstream.
Для другого аргументу можна встановлювати наступні константні значення:
• ios::app — додає дані в кінець файлу замість видалення всього вмісту файлу;
• ios::ate — переводить точку введення в кінець файлу, але у вас є можливість вводити нові дані в будь-якому місці файлу;
• ios::trunc — встановлюється за умовчанням; повністю видаляє (відкидає) поточний вміст файлу;
• ios::nocreate — якщо файл не існує, операція відкриття не виконується;
• ios::noreplace — якщо файл вже існує, операція відкриття не виконується.
Імена констант є абревіатурами виконуваних дій: app — apend (додати), ate — at end (у кінець), trunc — truncate (відкинути) і тому подібне
Лістинг 17 є модифікацією лістингу 16 з установкою опції додавання даних у файл при його повторному відкритті.