Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Запись в файл(лекция).doc
Скачиваний:
6
Добавлен:
11.02.2016
Размер:
532.99 Кб
Скачать

Стандартні потоки

На початку виконання будь-якої програми, що написана на мові С, автоматично відкривається з потоки:

stdin – стандартний потік введення, як правило використовується для введення з клавіатури;

etdout – стандартний потік виведення, як правило використовується виведення на дисплей/монітор;

stderr – стандартний потік помилок.

Потоки stdin, stdout та stderr є можливість застосовувати як файлові вказівники в будь-якій функції, що використовує вказівник типу file*.

Приклад зчитування з клавіатури символьного рядка використовуючи потік введення. Необхідно відмітити, що такий спосіб введення більш коректний ніж використання функції gets(), тому що при її використанні виникають проблеми з переповненням. Єдиним мінусом використання функції fgets() є те, що вона зчитує та записує символьний рядок з символом переходу на наступний рядок. В наведеному прикладі показано як здійснити введення та заміни символу переходу у разі потреби.

#include <stdio.h>

#include <string.h>

int main()

{

char str[80];

int i;

printf("Введіть символьний рядок: ");

fgets(str, 10, stdin);

// зчитування символьного рядка з потоку stdin, що відповідає за введення та по замовчуванню є клавіатурою

i = strlen(str)-1;

// визначаємо довжину символьного рядка

/* Перевіряємо кінцевий символ чи є він переходом на наступний рядок, а потім знищуємо його */

if(str[i]=='\n') str[i] = '\0';

printf("Введений рядок %s", str);

//виводимо символьний рядок

return 0;

}

Перенаправлення потоків

Для пере направлення потоків використовується функція freopen(). Її можна використовувати для пере направлення стандартних потоків, що дуже корисно при відлагоджені програми, наприклад здійснюється виведення не на екран, а у файл.

FILE *f reopen (const char *имя_файлу, const char *режим, FILE *поток)

Параметр режим може мати такі ж самі значення як у функції fopen().

В наступному прикладі функція freopen() перенаправляє стандартний потік stdout у файл OUTPUT.

#include <stdio.h>

int main(void)

{

char str[80];

freopen("c:\\output.txt", "w", stdout);

printf("Введіть символьний рядок: ");

gets(str);

printf(str);

return 0;

}

Результат виконання

Результат запису потоку у файл

Робота з файлами у С++

Для работи з файлами в мові С++ використовуються класи потоків, для їх використання використовується бібліотека fstream. 

Існує 3 основні класи для потоків:

ifstream  використовується для роботи з файлами в режимі зчитування;

ofstream – в режимі запису;

fstream – запису та зчитування.

Оголошення змінних, що будуть пов’язані з відповідним потоком, відбувається наступним чином:

#include < fstream.h>

ifstream inf; – оголошена зміна inf для потоку в режимі запису;

ofstream outf; – оголошена зміна outf для потоку в режимі зчитування;

fstream iof; – оголошена зміна iof для потоку в режимі зчитування та запису.

Відкриття файлу здійснюється командою, що має наступну специфікацію:

<Змінна, що пов’язана з потоком> .open(<ім’я файла>,<режим роботи> , <режим доступу до файлу>);

По замовчувані усі файли відкриваються в текстовому режимі.

Файл може бути відкритий в одному з наступних режимів:

  • ios::in — відкриття файлу в режимі зчитування даних, він є режимом по замовчуванні для потоку ifstream;

  • ios::out — відкриття файлу в режимі запису даних (при цьому існуючий файл знищується), він є режимом по замовчуванню для потоку ofstream;

  • ios::binary — відкриття файлу в двійковому (бінарному) режимі;

  • ios::app — відкриття файлу в режимі запису даних в кінець файлу;

  • ios::ate — перейти в кінець вже відкритого файлу;

  • ios::trunc — очищує файл, це ж відбувається в режимі ios::out;

  • ios::nocreate —забезпечує виконання операції тільки відкриття файлу тільки для існуючого файлу;

  • ios::noreplace — не дозволяє відкривати існуючий файл.

Режими відкриття файлу є можливість об’єднувати знаком «и» («|»), наприклад при відкриті файлу для запису даних в бінарному (двійковому) режимі необхідно задани ios::out | ios::binary. Якщо параметр режиму доступу не вказано робота з потоком буде відбуватися по замовчуванні для цього потоку.

Режим доступу до файлу визначаються атрибутами типу int

Атрибут

Значення

0

Нормальний файл, відкритий доступ

1

Файл тільки для зчитування

2

Скритий файл

4

Системний файл

8

Архівний файл

При відкритті файлу файловій (потоковій) змінній присвоюється значення true, в іншому випадку false.

Закриття роботи з потоком здійснюється командою:

<потокова (файлова) зміна>.close();

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]