Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Відкриття потоків.

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

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

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

Функція створює новий потік і пов'язує його з фізичним файлом, заданим іменем fname. Параметр fmode задає режими обміну даними. За умови успішного відкриття потоку створюється спеціальна структура зі шаблоном FILE, оголошеним через декларацію typedef у заголовному файлі <stdio.h>. Поля цієї структури заповнюються інформацією про відкритий файл і створений потік, необхідною для організації файлового введення/виведення в конкретному операційному середовищі. Функція повертає адресу (вказівник) створеної та заповненої даними структури FILE.

Якщо ж потік відкрити не вдалось (найчастіше це буває через неправильно задане ім'я файлу або хибний шлях), то структура FILE не створюється, a fopen () повертає порожній вказівник NULL.


Зупинимось детальніше на параметрах функції fopen (). Обидва є вказівниками на символьні рядки. Перший параметр - fname задає ім'я файлу. Пошук файлу з даним іменем (якщо ім'я включає розширення, то його необхідно вказати) виконується тільки в тому каталозі, який є активним на даний момент. Для файлів з інших каталогів треба вказувати шлях за правилами відповідної операційної системи. Нагадаємо, що в константних символьних рядках мови С символ лівого слеша треба подвоювати, тобто шлях до файлу

A:\LABROBC\delwords.cpp

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

"А:\\LABROBC\\delwords.cpp"

 

Другий параметр функції fopen () - fmode задає спосіб відкриття файлу (потоку) і характер наступних операцій обміну зі створеним потоком. Основними режимами відкриття є:

 

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

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

• "а" - файл відкривається для доповнення.


Режим "r" передбачає, що файл, який треба відкрити, вже існує, інакше фіксується помилка і fopen () повертає значення NULL. Режим "w" призначений для створення нового файлу, якщо ж файл зі заданим іменем вже є в робочому каталозі, то його вміст буде витертий. Щоб унеможливити випадкове витирання однойменного файлу, треба попередньо перевірити, чи такий файл існує Режим "а" зберігає вміст існуючого файлу, а якщо файл зі заданим іменем відсутній, то створює новий файл.

 

До ключової літери кожного режиму відкриття можна додати знак +, а саме

''r+ ", "w+", "а+". У цьому випадку відкриті файли можна буде використовувати як для читання, так і для запису. Режим "r+" вимагає, щоб файл, який відкривається, вже існував, і не дозволяє збільшувати розмір файла в процесі запису. Файли, відкриті в режимах "w+" і "а+", можна збільшувати, а інформацію, занесену в них, зчитувати.

 

Додатково в параметрі fmode можна вказати літеру t або b, якими задаються відповідно текстовий чи бінарний (двійковий) режим відкриття потоку. За правилами замовчування автоматично встановлюється текстовий режим. Різниця між двома режимами полягає тільки в інтерпретації двобайтової комбінації символів з кодами 0xd і 0ха ("повернення каретки" і "новий рядок"), якою позначається натискання клавіші Enter


Якщо файловий обмін виконується в текстовому режимі, то дана комбінація в процесі читання замінюється одним символом нового рядка “\n”, а в разі запису навпаки –кожен символ “\n” заноситься у потік як двобайтова комбінація "\r\n". У бінарних режимах такі заміни не виконуються. Оскільки у файлах, що містять двійкові коди числових даних, імовірна поява двох сусідніх байтів, значення яких відповідають комбінації "\r\n", то, щоб уникнути їх перетворення, треба встановити бінарний режим відкриття потоку, наприклад: "rb" або "w+b" (останній режим можна позначити еквівалентною формою запису: "wb+").

Наведемо приклад відкриття потоку з перевіркою коректності результату.

FILE *fp; /* вказівник потоку */

char *fname="report.txt"; /* ім'я файлу */

fp = fopen(fname, "rt");

if (fp==NULL) /* потік відкрити не вдалось */

{ printf ("Файл %s не знайдено\n", fname); return 0;

}

. . . /* Дії з відкритим файлом */

 

Кожен потік повинен мати свій вказівник з типом FILE *, який зберігає адресу структури, заповненої даними про відкритий файл і пов'язаний з ним потік Цей вказівник надалі ми називатимемо просто вказівником потоку.


3.2. Закриття потоків.

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

int fclose (FILE* fp);

Функція має один параметр fp - вказівник на потік, який треба закрити. У разі успішного виконання fclose () повертає значення 0. Якщо ж потік закрити не вдалось (це може трапитись через витирання файла або відсутність вільного місця на диску), то fclose () повертає макроконстанту EOF, оголошену в <stdio.h>.

У більшості систем програмування, в т.ч. у Borland C, значенням макроконстанти EOF є -1, але це значення не стандартизоване.

 

Система програмування Borland C додатково підтримує функцію

int fcloseall (void);

яка закриває відразу всі потоки, відкриті в програмі на даний момент. Функція повертає кількість закритих потоків, а в разі помилки закриття файлів - EOF.

 



Читайте також:

  1. II. Відкриття і подолання схоластичного світогляду
  2. Великі географічні відкриття і первісне нагромадження капіталу
  3. Великі географічні відкриття та їхній вплив на економічний розвиток Європи
  4. Види банківських рахунків та порядок їх відкриття в установах банку
  5. Види банківських розрахунків і порядок їх відкриття.
  6. Визначення основних параметрів грошових потоків.
  7. Відкриття А. Ейнштейна, Н. Бора, М. Планка, Е. Резер­форда, 3. Фрейда та ін.
  8. Відкриття банками рахунків у національній та іноземній валютах і режим функціонування цих рахунків. Переоформлення та закриття рахунків
  9. Відкриття з'єднання з базою даних.
  10. Відкриття Музею – лабораторії загальної та регіональної геології ім. В.І. Вернадського увічнює пам’ять видатних учених і створює базу для подальшого розвитку їх спадщини.
  11. Відкриття Півдня




Переглядів: 1189

<== попередня сторінка | наступна сторінка ==>
Групи функцій для роботи з потоками | Стандартні потоки, перескерування потоків

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.009 сек.