русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Бібліотека С


Дата додавання: 2014-11-28; переглядів: 779.


 

Для програмування операцій введення з файлу й виведення у файл із форматним перетворенням використовуються функції fscanf та fprintf з бібліотечного модулю stdin.h. Ці функції є аналогами функцій консольного введення/виведення printf і scanf про які мова вже була. Параметри цих функцій записуються в такий спосіб:

fscanf(f,format,p1,p2, ...);

fprintf(f,format,e1, e2, ...);

Тут f - змінна типу FILE*. Таку змінну називають покажчиком на файл або файловою змінною. Іноді таку змінну (разом з відповідним файлом) називають потоком. Ініціалізувати файлову змінну можна за допомогою функції fopen, що відкриває зазначений файл і повертає покажчик на нього. Прототип цієї функції має такий вигляд:

FILE* fopen(char* filename, char* mode);

Тут filename - ім'я файлу, що відкривається, mode - параметр, що вказує на режим його наступної роботи. Нижче наведені значення параметру mode.

"r" - відкрити файл для читання;

"w" - створити файл і відкрити для запису;

"a" - відкрити існуючий файл для продовження запису або створити файл і відкрити для запису.

Для обробки файлів в текстовому режимі до вказаних символів додається символ "t": "rt", "wt", "at" (такий режим передбачений за умовчанням). Для завдання режиму обміну на байтовому рівні додається символ "b": "rb", "wb", "ab". Для роботи в режимі Update (прямого доступу) додається символ "+" (файл відкривається для читання й запису водночас):

"r+" - відкрити існуючий файл;

"w+" - створити новий або відкрити існуючий;

"a+" - створити новий або відкрити існуючий з можливістю поповнення інформації.

Якщо ім'я файлу filename вказати як значення "CON" (консоль), то введення буде відбуватися із клавіатури, а виведення на екран.

Якщо файл відкрити не вдалося, функція fopen повертає значення NULL. При досягненні кінця файлу функція fscanf повертає спеціальний символ EOF. Для перевірки досягнення кінця файлу можна застосовувати функцію feof(FILE*), вона повертає значення true (або відповідне ціле число), якщо файл вже прочитано до кінця.

У програмуванні операцій з файлами корисною є процедура rewind(FILE*), вона встановлює покажчик поточної позиції файлу в нуль (тобто у початок файлу).

 

Читання й запис без форматних перетворень

Для читання й запису без форматних перетворень передбачені наступні функції:

fread(адреса_об’єкта, розмір_об’єкта, кількість_об'єктів, f);

fwrite(адреса_об’єкта,розмір_об’єкта, кількість_об'єктів, f);

Перший параметр вказує адресу, куди треба розмістити або звідки взяти послідовність байтів. Другий параметр вказує на кількість байтів, що передаються, третій - кількість об'єктів. Останнім параметром є покажчик на файл типу FILE*.

Для бінарного введення/виведення, в тих випадках, коли передається одне значення, можна створити і далі використовувати біль зручну функцію:

void fprint(FILE* f, &x)

{ fwrite(&x,sizeof(x),1,f);

}

 

Нижче наведено короткий опис ще декількох функцій для роботи з файлами, які корисно знати. Функції визначені у файлі stdio.h.

 

int fclose(FILE* f);

Закрити файл, на який вказує покажчик f.

 

int putc(int c, FILE* f);

Записати символ с у файл f.

 

int getc(FILE* f);

Добути символ з файлу f. Якщо кінець файлу досягнутий, функція повертає символ EOF.

 

int fseek(FILE* f, long offset, int whence);

Помістити покажчик файлу в положення, що відповідає зсуву offset та параметру whence:

- якщо whence = 0, зсув відлічується від початку файлу;

- якщо whence = 1, зсув відлічується від поточної позиції файлу;

- якщо whence = 2, зсув відлічується від кінця файлу.

 

int fprintf(FILE* f, const char* format, x1, x2, ...);

Форматне виведення значень x1, x2, ... у файл f з використанням форматного рядка format.

 

int fscanf(FILE* f, const char* format, p1, p2, ...);

Форматне введення з файлу f з використанням форматного рядка format та розміщення даних по адресах p1, p2, ... .

 

int feof(FILE* f);

Функція повертає значення true, якщо досягнутий кінець файлу, інакше функція повертає значення false.

 

size_t fread(p,size,n,f);

Читання з бінарного файлу (без форматних перетворень), p - адреса змінної, значення якої читається, size - розмір значення, що читається, в байтах, n - кількість значень, що читаються, f - ім'я потоку. Значення, що повертається, належить цілому типу і дорівнює кількості прочитаних значень.

 

size_t fwrite(p,size,n,f);

Запис у бінарний файл (без форматних перетворень), p - адреса змінної, значення якої записується, size – розмір значення, що записується, в байтах, n - кількість таких значень, f - ім'я потоку. Значення, що повертається, належить цілому типу і дорівнює кількості записаних значень.

 

void rewind(FILE* f);

Встановлює внутрішній покажчик файлу на його початок.

 

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

Надано файл, що містить деякий текст. Наведена нижче програма читає вміст файлу й кожне прочитане слово виводить на екран в окремий рядок.

 

// Приклад 1

#include <syst.h>


<== попередня лекція | наступна лекція ==>
Види файлів і режими роботи з ними | Void main()


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн