Технологія роботи з файлами даних
Доступ до фізичних файлів у програмах здійснюється за допомогою файлових змінних, які фактично виконують роль логічного файла. У сучасних мовах програмування логічний файл у більшості випадків представляється не просто змінною, а певним об'єктом, з яким пов'язані уявлення про конкретну структуру даних, що зберігатиметься у файлі. Наприклад, у С-програмах робота з файлами здійснюється через файловий покажчик стандартного типу FILE, який містить різноманітні відомості про файл: його ім'я, розташування на диску, режим роботи з файлом, покажчик поточної позиції і т. ін.
При роботі з файлами даних слід відзрізняти власне обробку даних від їх зчитування з файлу або запису у файл. Обробка даних є внутрішньою справою програми і не має відношення до роботи з файлами. Робота ж з файлом полягає саме у реалізації файлового введення-виведення. Тому основними діями при роботі з файлами є операція зчитування (введення), тобто копіювання значення доступного елемента файлу у потік або змінну, означену у програмі, та операція запису (виведення) - копіювання значення змінної у поточний елемент файлу.
Але тільки цими діями наявні у мовах програмування засоби роботи з файлами не обмежуються. Будь-який файл повинен бути спеціальним чином підготовлений до роботи. Також певним чином потрібно завершити роботу з ним.
Типовий сценарій роботи з файлами даних включає наступні кроки:
зв'язування файлової змінної (потоку) з фізичним файлом;
відкриття файла;
його обробка (читання/запис);
закриття файла.
Перед початком роботи будь-який фізичний файл необхідно зв'язати з ідентифікатором, який буде представляти цей файл у програмі. У деяких мовах програмування для цього служать спеціальні процедури (наприклад, процедура Аssign у Pascal), у інших цей зв'язок встановлюється при відкритті файлу (наприклад, у С/С++).
Відкриття файлу – це операція, яка означає, що програма "захоплює" заданий фізичний файл і повідомляє ОС, що далі вона буде працювати саме з цим файлом. Такий крок потрібен, щоб не виникало конфліктів при спробі одночасного запису інформації в один і той же файл різними програмами.
При відкритті логічного файлу, зазвичай, виконуються наступні дії:
пошук фізичного файла на зовнішньому носії;
утворення файлового буферу для обміну з фізичним файлом;
встановлення файлового покажчика на початок логічного файлу (потоку).
Оскільки зчитувати дані з файлу можуть одночасно декілька програм, то в операції відкриття файлу, зазвичай, уточнюється, в якому режимі файл відкривається: "читання" (можливе тільки подальше зчитування інформації із файла), "запису" (можливий тільки запис даних у файл) або "читання" і "запису" (можливе як зчитування інформації із файла, так і запис даних у файл). В деяких мовах програмування при відкритті файлу також вказується його тип: текстовий або бінарний (двійковий).
Обробка файлу полягає у реалізації операцій зчитуванню даних із файлу або запису даних у файл. Операції читання та запису завжди виконуються, починаючи з поточної позиції у файлі, яка встановлюється при відкритті файлу. При виконанні кожної операції введення/виведення покажчик поточної позиції файлу зміщується на одну позицію в сторону кінця файлу.
Виконання операцій з файлами може викликати багато помилкових ситуацій (наприклад, при відсутності файла даних, неправильно встановленій дискеті тощо). За замовчуванням компілятор мови програмування автоматично виконує перевірку на коректність операцій введення-виведення. При виявленні помилки виконання програми припиняється і на екран виводиться відповідне повідомлення. Розвинені мови програмування мають засоби для керування режимом обробки таких помилок.
Логічним завершенням роботи з відкритим файлом є його від’єднання від програми. Цю операцію називають закриттям файлу. При закритті логічного файла, відкритого для запису, всі дані, що накопичилися у системному буфері, записуються у фізичний файл, а сам буфер, утворений при відкритті файлу, ліквідується. Цей процес, який, зазвичай, називають дозаписом потоку (або примусовим звільненням буфера), гарантує, що ніяка інформація випадково не залишиться в буфері диска. Після цього ідентифікатор логічного файла можна зв'язати з іншим дисковим файлом, а закритийфайлстає доступним для обробки іншими програмами. Якщо програма завершує свою роботу нормально, то всі файли закриваються автоматично; у разі аварійного завершення роботи програми, файли не закриваються.
Робота з файлами даних в мовах програмування може виконуватися кількома різними способами:
з використанням бібліотечних функцій;
з використанням бібліотеки класів;
з використанням WinAPI-функцій введення-виведення, які використовують файлові дескриптори2;
з використанням бібліотечних компонентів тощо.
Файлове введення-виведення у С/С++, як правило, здійснюється або за допомогою бібліотечних функцій (в стилі C), або з використанням бібліотеки класів C++ (в стилі C++).
