Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / ооп / 4_кол / Лекції / ООП (15. Робота з файлами).doc
Скачиваний:
24
Добавлен:
30.05.2020
Размер:
63.49 Кб
Скачать

Системне програмне забезпечення та операційні системи. Лекція 6.1

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

Лекція: Файли – доступ, загальні відомості, відкриття та засоби відкриття.

Мета: ознайомити студентів з можливостями для роботи з файлами, які забезпечує мова С. Розглянути методи відкриття файлів та їх особливості, один відносно одного. Розглянути функції, що виконують обробку різнорідної інформації та особливості їх застосування.

План:

  1. Вступ. Загальні відмінності про файли.

  2. Відкриття файлів, засоби відкриття файлів.

  3. Форматований ввід-вивід для файлів.

  4. Символьний ввод-вивід для файлів

Загальні відомості про файли.

Файли призначені для зберігання інформації на зовнішніх носіях, тобто прийнято, що інформація, записана, наприклад, на диску, повинна перебувати усередині файлу. Звичайно під файлом розуміють іменовану частину простору на носії інформації.

Головне завдання файлової системи (file system) - сховати особливості вводу-виводу й дати програмістові просту абстрактну модель файлів, незалежних від пристроїв. Для читання, створення, видалення, запису, відкриття й закриття файлів також є велика категорія системних викликів (створення, видалення, відкриття, закриття, читання й т.д.). Користувачам добре знайомі такі пов'язані з організацією файлової системи поняття, як поточний каталог, кореневий каталог, шлях. Для маніпулювання цими об'єктами в операційній системі є системні виклики.

В тих випадках, коли програма обробляє достатньо великий об'єм даних, останні звичайно організовуються і зберігаються поза оперативною пам'яттю ЕОМ. Найефективнішим пристроєм для організації зовнішнього зберігання даних є диски. Перш ніж читати або записувати інформацию у файл, треба відкрити його за допомогою стандартної бібліотечної функції fopen. Програма, що використовує цю функцію, повинна включати під час компіляції системний файл stdio.h, в якому визначений новий тип даних - FILE.

У програмі потрібно описувати посилання на файли і виглядає це, наприклад, так: FILE *fu; Тут fu означає покажчик на FILE, а fopen видає посилання на цей файл. Функція fopen має наступний заголовок:

FILE *fopen( char *fname, char type);

Формальний синтаксис використання функції має наступний вигляд:

fu = fopen (“file_name”, “mode”);

Аргумент file_name – рядок, що містить імя файлу, який буде відкриватися, зазвичай цей рядо містить повний шлях до файлу.

Аргумент mode вказує режим відкриття файлу – для читання, запису або дозапису. Може приймати наступні значення:

r – відкриття файлу для читання. Якщо файл не існує, функція поверне NULL.

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

a – відкриття файлу для дописання даних. Якщо файл не існує, він створюється. Якщо існує – нові дані дописуються в кінець.

r+ - відкриття файлу для читання і запису. Якщо файл не існує, він створюється. Якщо існує – нові дані записуються на початку, затираючи вже існуючі.

w+ - відкриття файлу для читання і запису. Якщо файл не існує, він створюється. Якщо файл існує – він очищується (всі дані знищуються), а нові дані записуються в старий, очищений файл.

a+ - відкриття файлу для читання і дозапису. Якщо файл не існує, він створюється. Якщо існує – нові дані записуються в кінець.

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

Приклад.

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

#include <stdio.h>

void main ()

{

FIFE *f;

char filename[80];

char mode[3];

puts ("vv. imia fajly, sho treba vidkrity");

scanf ("%s", &filename);

puts ("vv. rezhim vidkrittya fajly");

scanf ("%s", &mode);

f=fopen (filename, mode);

if (f==NULL) puts ("file open error!");

else

printf ("fajl %s v rezhimy %s vidkryto", filename, mode);

}

Функції керування файлами

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

Функція видалення файлів

Для видалення файлів викликається стандартна бібліотечна функція remove().

Її прототип описаний в файлі Stdio.h та виглядає наступним чином.

Int remove (const char *filename);

Filename – вказівник на імя файлу, який треба знищити. Причому усей файл на повинен бути відкритим в момент видалення.

Якщо файл існує, операційна система його видаляє, а функція повертає 0. Якщо файла не існувало, він був доступний лише для читання та в разі інших помилок, функція поверне – 1.

Треба пам’ятати, що видалений файл відновити неможливо.

#include<stdio.h>

Int main (void)

{

Char filename[&0];

Puts(“ведіть ім’я файла, подп.видаленню”);

Gets(filename);

If(remove(filename)==0)

Printf(“файл %s був видалений”,filename);

Else printf(“виникла помилка”)

Return(0);

}

Функція перейменування

Для зміни імені файлу існуючого на диску, слугує функція rename()

Int rename (const char *oldname, const char *newname );

Oldname та newname – відповідно, існуюче та нове ім’я файлу. Найголовніша вимога – обидва імені повинні посилатися на 1 логічний диск ПК. За допомогою йього методу не можна перемістити файл з одного диску на інший.

Функція повертає 0 повертає у разі успіху, та 1 в разі помилки.

Помилки:

  • Файлу з oldname немає;

  • Файл з newname вже є;

  • Спроба переміщується.

#include<stdio.h>

Int main (void)

{

Char oldname [80] Char newname [80];

Printf(“введ.текущ. имя файла:\n”);

Gets(oldname);

Printf(“введ.новое имя файла:\n”);

Gets(newname);

If(rename(oldname, newname)==0)

Printf(“ісп”);

Else (“error”)

Return(0);

}

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

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

  • форматований спосіб, за допогою якого можна зберігати дані в файлі в упорядоченому вигляді;

  • символьинй спосіб – збереження даних по одному символу або рядку;

  • блочний – припустимий лише для двійкових файлів.

Форматований ввід-вивід для файлів.

Форматований вивід до файлів виконує функція fprintf

int fprintf ( FILE *fp, string format [, mixed args] );

перший аргумент – вказівник на структуру FILE, який повернула функція відкриття;

другий – рядок формату. Він та його властивості абсолютно аналогічні рядку формату функції printf;

останній аргумент – змінний перелік аргументів, це змінні або вирази, значення яких слід ввести до потоку.

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

int fscanf (FILE *fp, string format [, mixed &...] )

перший аргумент – вказівник на структуру FILE, який повернула функція відкриття;

другий – рядок формату. Він та його властивості абсолютно аналогічні рядку формату функції scanf;

останній аргумент – змінний перелік аргументів, це змінні або вирази, значення яких будуть зчитані з потоку.

Будь-який порожній простір в рядку формату еквівалентний будь-якому порожньому простору у вхідному потоці. Це означає, що навіть табуляція \t у рядку формату може бути зіставлена одному символу пропуску у вхідному потоці даних.

Символьний ввод-вивід для файлів

У відношенні файлів термін символьний ввід – вивід стосується як обробки поодиночних символів, так і їх послідовностей. Символьний ввід – вивід найчастіше застосовується до текстових файлів.

Символьний вивід інформації з файлу відбувається за допомогою функції fgets.

char fgets (char *str, int length, FILE *fp);

перший аргумент – вказівник на буфер, в який слід розмістити рядок;

другий – максимальна кількість символів, яку можна зчитати з файлу. Якщо length не специфікований, за умовчанням length буде 1k, або 1024 байт

останній – вказівник на файлову структуру, який повернула функція відкриття файлів.

Якщо виникла помилка, повертає FALSE.

Функція зчитує символи з потоку fp в пам'ять, починаючи з адреси, вказаної в str. Зчитає length-1 символ.

Символьний вивід інформації до файлу виконує функція fputs. Вона ідентична функції puts, єдина відмінність – необхідно вказати поток виводу.

char fputs (char *str, FILE *fp);

аргумент str – вказівник на рядок з завершуючим нульовим символом, відповідно fp – вказівник на структуру FILE, який був повернений функцією відкриття.

Рядок str записується до файлу.