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


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


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


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


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


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


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


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


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


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



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






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

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

Функція 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. Відкриття Півдня




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

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

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

 

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


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