МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
|||||||
Відкриття потоків.Відкриття/закриття потоків Функція 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.
Читайте також:
|
||||||||
|