68963

Файли. Робота з файлами

Лекция

Информатика, кибернетика и программирование

Загальні поняття про потік Відкриття та закриття потоку Функції для роботи з файлами Двійковий режим обміну з файлами Загальні поняття про потік На рівні потокового вводу виводу обмін даними виконується побайтно. Для файлів на диску за одне звертання до пристрою виконується читання або запис фіксованої порції даних.

Украинкский

2014-09-28

48.5 KB

0 чел.

Лекція № 8

Тема: Файли. Робота з файлами.

План

  1.  Загальні поняття про потік
  2.  Відкриття та закриття потоку
  3.  Функції для роботи з файлами
  4.  Двійковий режим обміну з файлами

Загальні поняття про потік

На рівні потокового вводу/виводу обмін даними виконується побайтно. Для файлів на диску за одне звертання до пристрою виконується читання або запис фіксованої порції даних. Частіше всього мінімальною порцією даних, що бере участь в обміні з зовнішньою пам'яттю, є блоки в 512 байт або 1024 байти. При введенні з диска (при читанні з файлу) дані поміщаються в буфер операційної системи, а потім побайтно або визначеними порціями передаються програмі користувача. При виведенні даних у файл вони нагромаджуються в буфері, а при заповненні буфера записуються у вигляді єдиного блоку на диск за одне звернення до нього. Буфери операційної системи реалізуються у вигляді ділянок основної пам'яті. Тому пересилання між буферами введення-виведення виконуваною програмою відбуваються достатньо швидко на відміну від реальних обмінів з фізичними пристроями. Таким чином, потік - це файл разом із засобами буферизації, які надаються.

При роботі з потоком можна проводити наступні дії:

•  відкривати і закривати потоки (зв'язувати покажчики на потоки з конкретними файлами);

•  вводити і виводити:  символ, рядок,  форматовані дані, порцією даних довільної довжини;

•  аналізувати помилки потокового введення-виведення і умову досягнення кінця потоку (кінця файлу);

•  управляти буферизацією потоку і розміром буфера;

•  одержувати і встановлювати покажчик (індикатор) поточної позиції в потоці.

Для того, щоб можна було використовувати функції бібліотеки введення-виведення мови Сі, в програму необхідно включити файл stdio.h (#include <stdio.h>), який містить прототипи функцій введення-виведення, а також визначення констант, типів і структур, необхідних для роботи функцій обміну з потоком.

Відкриття і закриття потоку

Перш ніж почати працювати з потоком, його необхідно ініціалізувати, тобто відкрити. При цьому потік зв'язується в виконуваній програмі із структурою наперед визначеного типу FILE. Визначення структурного типу FILE знаходиться в файлі stdio.h. В структурі FILE містяться компоненти, за допомогою яких ведеться робота з потоком, зокрема: покажчик на буфер, покажчик (індикатор) поточної позиції в потоці і інша інформація. При відкритті потоку в програму повертається покажчик на потік, який є покажчиком на об'єкт структурного типу FILE. Цей покажчик ідентифікує потік в усіх наступних операціях.

Покажчик на потік, наприклад fp, повинен бути оголошений в програмі таким чином:

#include <stdio.h>

FILE *fp;

Покажчик на потік набуває значення в результаті виконання функції відкриття потоку:

fp = fopen (ім'я_файлу, режим_відкриття);

Параметри ім'я_файлу і режим_відкриття є покажчиками на масиви символів, які містять відповідно ім'я файлу, пов'язаного з потоком, і рядок режимів відкриття. Однак ці параметри можуть задаватися і безпосередньо у вигляді рядків при виклику функції відкриття файлу:

fp =  fopen("t.txt",   "r");

де    t. txt - ім'я деякого файлу, пов'язаного з потоком;

r - позначення одного з режимів роботи з файлом (тип доступу до потоку).

Стандартно файл, пов'язаний з потоком, можна відкрити в одному з наступних шести режимів:

"w" - новий текстовий файл відкривається для запису. Якщо файл вже існував, то попередній вміст стирається, файл створюється наново;

"r" - існуючий текстовий файл відкривається тільки для читання;

"а" -текстовий файл відкривається (або створюється, якщо файлу немає) для додавання в нього нової порції інформації (додавання в кінець файлу). На відміну від режиму "w" режим "а" дозволяє відкривати вже існуючий файл, не знищуючи його попередньої версії, і писати в продовження файлу;

"w+" - новий текстовий файл відкривається для запису і подальших багатократних виправлень. Якщо файл вже існує, то попередній вміст стирається. Подальші після відкриття файлу запис і читання з нього допустимі в будь-якому місці файлу, у тому числі запис дозволений і в кінець файла, тобто файл може збільшуватися;

"r+" - існуючий текстовий файл відкривається як для читання, так і для запису в будь-якому місці файлу; однак в цьому режимі неможливий запис в кінець файлу, тобто неприпустимо збільшення розмірів файла;

"а+" -текстовий файл відкривається або створюється (якщо файлу немає) і стає доступним для змін, тобто для запису і для читання в будь-якому місці; при цьому на відміну від режиму "w+" можна відкрити існуючий файл і не знищувати його вмістимого; на відміну від режиму "г+" в режимі "а+" можна вести запис в кінець файлу, тобто збільшувати його розміри.

Потік можна відкрити в текстовому або двійковому (бінарному) режимі.

В текстовому режимі прочитана з потоку комбінація символів CR (значення 13) і LF (значення 10), тобто управляючі коди "повернення

каретки" і "перевід рядка", перетворюються в один символ нового рядка '\n' (значення 10, співпадаюче з LF). При записі в потік в текстовому режимі здійснюється зворотне перетворення, тобто символ нового рядка '\n' (LF) замінюється послідовністю CR і LF.

Якщо файл, пов'язаний з потоком, зберігає не текстову, а довільну двійкову інформацію, то вказані перетворення не потрібні і можуть бути навіть шкідливими. Обмін без такого перетворення виконується при виборі двійкового або бінарного режиму який позначається буквою b. Наприклад, "r+b" або "wb". В деяких компіляторах текстовий режим обміну позначається буквою t, тобто записують "a+t" або "rt".

Якщо потік відкритий для змін, тобто в параметрі режиму присутній символ "+", то дозволено як введення в потік, так і читання з нього. Проте зміна режиму (перехід від запису до читання і назад) повинна відбуватися тільки після установки покажчика потоку в потрібну позицію.

Відкриті на диску файли після закінчення роботи з ними рекомендується закрити явно. Для цього використовується бібліотечна функція

int fclose (покажчик_на_поток);

Відкритий файл можна відкрити повторно (наприклад, для змінення режиму роботи з ним) тільки після того, як файл буде закритий за допомогою функції fclose().

Функції для роботи з файлами

В мові Сі можливо організовувати роботу з файлами на диску. Для цієї мети в бібліотеці мови Сі включені наступні функції:

fgetc(), getc()ввід (читання) одного символу з файлу;

fputs(), putc()запис одного символу в файл;

fprintf()форматований вивід в файл;

fscanf()фор матований ввід (читання) з файлу;

fgets( ) - введення (читання) рядка з файлу;

fputs( ) - запис рядка у файл.

Двійковий (бінарний) режим обміну з файлами.

Двійковий  режим обміну організовується за допомогою функцій getc() і putc(), звернення до яких має наступний формат:

с= getc(fp);

putc(c, fp);

де    fp - покажчик на потік;

c — змінна типу int для прийому чергового символу з файлу або для запису її значення у файл. Прототипи функції:

int getc ( FILE *stream);

int putc (int с, FILE * stream);

Як приклад використання функцій getc( ) і putc() розглянемо програми введення даних у файл з клавіатури і програму виведення  їх на екран дисплея з файлу. Програма введення читає символи з клавіатури і записує їх у файл.  Ознакою завершення введення служить поступивший від клавіатури символ '#'. Ім'я файлу запрошується у користувача. Якщо при введенні послідовності символів натискається клавіша <Enter>, яка служить роздільником рядків при введенні з клавіатури, то у файл записуються управляючі коди "Повернення каретки" (CR - значення 13) і "Переклад рядка" (LF — значення 10). Код CR  при виведенні викликає перевід маркера (курсора) в початок рядка екрану дисплея. Код LF служить для переводу маркера на новий рядок дисплея. Значення цих кодів в тексті програми позначені відповідно ідентифікаторами CR і LF, тобто CR і LF - іменовані константи. Запис управляючих кодів CR і LF у файл дозволяє при подальшому виведенні файлу на екран відділити рядки один від одного.

 

/*   Програма введення символів  */

#include    <stdio.h>

int main () FILE

*fp;     /*  Покажчик  на потік  */

char с;

/* Восьмирічний код "Повернення каретки": */

const char CR='\015';

/* Восьмерічний код "Переклад рядка":  */

const  char LF = '\012'/

char fname[20]; /* Масив для імені файлу */

/* Запит імені файлу: */

puts("введіть ім'я файлу: \n");

gets(fname)

/* Відкрити файл для запису: */

if ((fp = fopen(fname,"w")) == NULL)

{

реrror(fname);

return 1;

}

/* Цикл введення і запису у файл символів: */

while  ((c = getchar()) != '#')

{

if  (c == '\n')                                                          

{

putc(CR, fp);

putc(LF, fp);

}

else putc(с, fp);

}

/* Цикл введення завершений; закрити файл: */

fclose(fp);

return 0;

}

Наступна програма читає потік символів з раніше створеного файлу і виводить його на екран дисплея:

/* Програма виведення символьного файлу на екран дисплея */

#include <stdio.h>

int main ()

{

FILE *fp; /* Покажчик на потік */

char с;

char fname[20]; /* Масив для імені файлу */

/* Запит імені файлу:  */

puts("введіть ім'я файлу: \n ")

gets(fname);

/* Відкрити файл для читання: */

if ((fp = fopen(fname,"r")) = = NULL)

{

реrror(fname);

return 1;

}

/* Цикл читання з файлу і висновку символів на екран: */

while ((с = getc(fp)) != EOF)

putchar(с);

fclose(fp);

/* Закрити файл */

return 0

}


 

А также другие работы, которые могут Вас заинтересовать

48738. ІНДИВІДУАЛЬНІ НАВЧАЛЬНО-ДОСЛІДНІ, ТВОРЧІ ТА ТЕСТОВІ ЗАВДАННЯ З ТЕОРІЇ ТА МЕТОДИКИ ВИКЛАДАННЯ ГІМНАСТИКИ 428.5 KB
  Вивчення студентами дисципліни Теорія та методика викладання гімнастикиâ крім засвоєння теоретичних відомостей щодо основ теорії й організації навчання гімнастичних вправ техніки їх виконання і методики проведення передбачає опанування практичних вмінь і навичок виконання гімнастичних елементів. Виходячи з цього у цій методичній розробці подані елементи практики гімнастичні вправи і тестові завдання що виносяться на підсумковий модульний контроль складання яких є обовязковим.010203 Здоров'я людини повинні знати: стройові...
48740. РАЗРАБОТКА МАТЕМАТИЧЕСКИХ МОДЕЛЕЙ ЭЛЕКТРОННЫХ СХЕМ В РАЗЛИЧНЫХ РЕЖИМАХ ИХ РАБОТЫ 1.68 MB
  К основным качественным показателем и параметрам усилителя относятся коэффициент передачи коэффициент усиления Кр входное и выходное сопротивлениях Zвх Zвых динамический диапазон коэффициент нелинейных искажений коэффициент шума...
48741. Журналістський фах. Методичні вказівки 42 KB
  Огляд коментар стаття рецензія лист кореспонденція: характерні риси і тенденції у сучасній пресі на прикладі одного або групи видань 1215. Літературна основа кореспонденції на прикладі. Факт як фундамент кореспонденції на прикладі. Адресність і документальність кореспонденції на прикладі.
48742. Направления совершенствования деятельности предприятия 450.5 KB
  Существует связь между информационными технологиями и менеджментом. Менеджеру все время приходится принимать решения в условиях большой неопределенности: инфляция, изменения валютного курса, изменение налоговых и правовых условий работы...
48743. Анализ линейной динамической цепи 372.5 KB
  В данной работе исследуется линейная реактивная цепь, нагруженная на резистор и питаемая от источника ЭДС. С помощью метода узловых напряжений составляется система уравнений цепи в матричной и скалярной форме.
48744. Вивчення ролі державної мови у контексті формування та зміцнення української національної свідомості 387.5 KB
  У державотворчому процесі мова поряд із внутрішніми консолідуючими чинниками виконує й зовнішню функцію яка полягає у виокремленні держави зпоміж інших країн в утвердженні нації і держави серед багатомовної спільноти. У суспільстві де переважає корінний етнос і панує його мова як наприклад у країнах Європи зазначені функції мови поєднуються гармонійно. Внаслідок заборон і дискримінації адміністративносилового тиску якому піддавалася українська мова упродовж останніх трьох з половиною...
48745. Автопоезд-сортиментовоз самозагружающийся 8x4 с прицепом 2.86 MB
  Рама является одним из важнейших элементов любого автомобиля и характеризует грузоподъемность и производительность в данном случае сортиментовоза последняя собственно и характеризует себестоимость перевозок. Особое внимание необходимо уделить надежности автомобиля и его технологического оборудования.1 Технические характеристики Технические характеристики Модель МАЗ630308226 Колёсная формула: 6x4 Полная масса автопоезда кг 47 500 Полная масса автомобиля кг 27 500 Распределение полной массы: на переднюю ось кг 6 500 на заднюю...
48746. Подогреватели регенерации питательной воды турбоагрегатов 869.5 KB
  Рассмотрены схемы движения теплоносителей в аппаратах.Расчёт расходов и параметров теплоносителей в системе регенеративного подогрева Параметры пара и питательной воды в системе регенерации ПТУ К500240 Параметры пара и питательной воды в системе регенерации ПТУ К500240