Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Обробка бінарних файлівСтр 1 из 3Следующая ⇒
Теоретичні основи Зовнішнє ім’я файлу зазначається з урахуванням методики його подання для операційної системи. Воно може бути подане в повному вигляді (диск, шлях, ім’я: " C: \\Users\\a.dat") або в скороченому – з урахуванням принципів умовчання, що закладені в роботу операційної системи, а саме: · якщо не зазначене ім’я диска, то розглядається активний диск; · якщо не зазначений шлях до файлу, то розглядається поточна папка (поточний каталог); · якщо шлях починається не із символу \, то відлік шляху починається з поточної папки (слід пам’ятати про те, що в мові Сі символ \ є управляючим і в разі необхідності його подання він подвоюється: '\\'). Потокове введення/виведення На рівні потокового введення/виведення обмін даними здійснюється за байтами. Такі введення/виведення можливі для друкувального пристрою, дисплея і дискових файлів. Функції бібліотеки введення/виведення, дозволяючи обробляти дані різних форматів, забезпечують при цьому буферизацію процесів введення і виведення. Потік – це файл разом із засобами буферизації. При роботі з потоком можна: · відкривати і закривати потоки (зв’язувати покажчики на потоки з конкретними файлами); · вводити і виводити дані; · аналізувати помилки потокового введення/виведення і умову досягнення кінця потоку (файлу); · керувати буферизацією; · керувати покажчиком поточної позиції у потоці. Якщо потік відкритий, то з ним зв’язується так званий покажчик (індикатор) поточної позиції. Читання/записування даних здійснюється починаючи з того байту файлу, на який вказує цей покажчик. При цьому покажчик поточної позиції автоматично «переміщається» по файлу на ту кількість байт, що відповідає зчитаному/записаному обсягу інформації. Результатом є те, що наступний сеанс читання/записування здійснюватиметься з орієнтацією на нове положення покажчика поточної позиції. Обробка бінарних файлів Бібліотечні функції уведення/виведення підключаються через заголовний файл stdio.h, який, у свою чергу, автоматично підключається при підключенні файлу iostream. Взагалі кажучи, файли зберігаються в бінарному (двійковому) форматі і тільки режим відкриття визначає, як програма повинна інтерпретувати вміст файлу. Текстовий режим є режимом за умовчанням, і в цьому режимі окремо інтерпретується послідовність з двох символів – «повернення каретки» ('\xD', десятковий код 13) і «переведення рядка» ('\xA', десятковий код 10). Бінарний режим відкриття файлу забезпечує сприйняття всіх символів окремо, у тому числі й символів '\xD' і '\xA'. Бінарні файли не створюються текстовими редакторами, але можуть бути створені за допомогою засобів мови C++ (або C). Для забезпечення доступу до файлового потоку, як і при обробці текстових файлів, використовується покажчик на тип FILE, що визначений у заголовному файлі stdio.h: FILE *ім’я_покажчика; Перед початком роботи з потоком (як і для текстового файлу), його потрібно відкрити, для чого застосовується функція fopen(), яка зв’язує потік з конкретним файлом, повертаючи при цьому значення покажчика на потік: FILE *fopen(char * ім’я_файлу, char *режим_відкриття); Параметри ім’я_файлу і режим_відкриття задаються або звичайними символьними масивами, або покажчиками на початок області пам’яті, у якій зберігається рядок символів. Щоб вказати про необхідність відкриття файлу в бінарному режимі рядок, у якому вказується режим відкриття доповнюється літерою b відносно відповідного стандартного режиму для текстового файлу. Таким чином, режимами відкриття для бінарних файлів є: · " wb" – відкриття нового бінарного файлу для записування; · " rb" – відкриття існуючого бінарного файлу для читання; · " ab" – бінарний файл відкривається (або створюється, якщо він відсутній) для дозаписування в кінець; · " wb+" – новий бінарний файл відкривається для записування, читання і подальшого багаторазового виправлення з можливістю дозаписування в кінець файлу; · " rb+" – існуючий бінарний файл відкривається як для читання, так і записування; · " ab+" – бінарний файл відкривається або створюється (якщо він відсутній) як для читання, так і записування, причому записування здійснюється завжди в кінець файлу незалежно від положення покажчика поточної позиції. Як і для текстових файлів, відкриття існуючого бінарного файлу в режимі " wb" або " wb+" забезпечує його повне відновлення. Приклади відкриття бінарних файлів: #include < iostream> При помилках у відкритті потоку покажчик набуває значення NULL. Тому необхідно здійснювати перевірку значення покажчика, що можна зробити, наприклад, так: FILE *f; Закриття потоку здійснюється функцією int fclose(FILE * покажчик_на_потік); Повторне відкриття потоку потрібно передувати його закриттям. При відкритті файлу в режимах " wb", " wb+", " rb", " rb+" покажчик поточної позиції установлюється на початок файлу, а при відкритті в режимах " ab" і " ab+" – на його кінець. Для введення/виведення даних при роботі з бінарними файлами використовують такі функції: size_t fread(void *покажчик_на_область_пам’яті, size_t розмір_блоку, size_t кількість, FILE *покажчик_на_потік); – читає з файлу, зв’язаного з потоком, на який указує покажчик_на_потік, кількість блоків даних, кожен з яких має розмір_блоку байт, і записує прочитані дані в область пам’яті, що адресується покажчиком, заданим як перший параметр; функція повертає кількість прочитаних блоків при успішному читанні або 0 у випадку, коли одразу виявляється кінець файлу або виникає помилка читання; size_t fwrite(void *покажчик_на_область_пам’яті, size_t розмір_блоку, size_t кількість, FILE *покажчик_на_потік); – пише у файл, зв’язаний з потоком, на який указує покажчик_на_потік, кількість блоків даних, кожен з яких має розмір_блоку байт, читаючи дані з області пам’яті, що адресується покажчиком, заданим як перший параметр; функція повертає кількість записаних блоків при успішному записуванні або 0 у випадку помилки записування. Тип size_t є цілочисловим типом, що в даному випадку еквівалентний типу long. Для позиціонування в потоці можна переміщати покажчик поточної позиції за допомогою наступної функції: int fseek(FILE * покажчик_на_потік, long зміщення, При звертанні до цієї функції параметр зміщення задається змінною або виразом типу long і вказує, на скільки байт потрібно змістити покажчик поточної позиції у прямому (> 0) або зворотному (< 0) напрямку. Початок_відліку вказує, по відношенню до якої позиції здійснюється зсув покажчика поточної позиції. Він задається однією з трьох констант: SEEK_SET (== 0) – початок файлу; SEEK_CUR (== 1) – поточна позиція; SEEK_END (== 2) – кінець файлу. Слід пам’ятати, що константа типу long записується у вигляді десяткового значення, слідом за яким додається суфікс L або l (наприклад, 128L). Функція fseek() повертає значення 0, якщо переміщення виконано успішно; інакше вона повертає нульове значення: fseek(f, -1L, SEEK_CUR); – повернутися на 1 байт; fseek(f, 0L, SEEK_END); – перейти на кінець потоку. Деякі інші корисні функції: long ftell(FILE * покажчик_на_потік); – повертає положення покажчика поточної позиції, що вимірюється в байтах від початку файлу, або значення (-1L) при помилці; int fgetpos(FILE * покажчик_на_потік, fpos_t * позиція); – записує в область пам’яті, що адресується покажчиком позиція, положення покажчика поточної позиції файлу і повертає значення 0 при успішному виконанні або ненульове значення при помилці (тип fpos_t – це цілочисловий тип, що використовується для визначення положення покажчика поточної позиції файлу за допомогою функції fgetpos() або зміщення покажчика поточної позиції файлу функцією fsetpos(); див. нижче); int fsetpos(FILE * покажчик_на_потік, fpos_t * позиція); – переводить покажчик поточної позиції файлу в позицію, яка зберігається в області пам’яті, що адресується покажчиком позиція, і повертає значення 0 при успішному виконанні або ненульове значення при помилці; void rewind(FILE * покажчик_на_потік); – переміщає покажчик поточної позиції на початок потоку; int feof(FILE * покажчик_на_потік); – повертає ненульове значення, якщо перед звертанням до цієї функції було прочитано ознаку кінця файлу, і 0, якщо спроби читання за кінцем файлу не було. Якщо файл відкритий і для введення, і для виведення (режими " r+" і " a+"), то в разі потреби переходу від введення до виведення (або навпаки) необхідно обов’язково виконати примусове зміщення покажчика поточної позиції файлу (як варіант – на 0 байт відносно поточної позиції). При роботі з файлами (будь-якими, а не тільки текстовими) корисними можуть бути такі дві функції, оголошені в заголовному файлі io.h: int remove(const char *шлях); – знищення файлу, ім’я якого задане як параметр (файл повинен бути закритим); int rename(const char *старе_ім’я, const char * нове_ім’я); – перейменування файлу або каталогу (файл повинен бути закритим). Якщо в новому імені файлу вказати інший шлях відносно старого, файл буде перенесений. Каталог перенести неможливо.
|