Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Функции работы с файлами
Файлом в С++, с одной стороны, называется последовательность байт, ограниченная стандартной константой EOF – признаком конца файла, с другой стороны, файлом называют некоторое пространство (объём памяти) на жёстком диске или некотором носителе. Таким образом, работа с файлами (запись в файл информации, чтение данных из файла) невозможна без создания потоков. При работе с файлами создается указатель на поток байтов. Этот поток может быть направлен из ОП на жёсткий диск при записи информации в файл или в ОП с жесткого диска при чтении информации из файла. Кроме того, при чтении или записи информации в файл особое место занимает переменная, которая носит название «указатель файла». Указатель файла определяет позицию (номер байта) в файле, начиная с которой записывается или считывается некоторая порция информации. Следовательно, указатель файла – это адрес байта, который предназначен для текущей обработки. В языке С++ работают с потоками (файлами) двух видов: текстовыми и двоичными. Текстовый поток – последовательность символов. В данном разделе такие потоки рассматриваться не будут. Двоичный поток – это последовательность байтов, соответствующая байтам на внешнем устройстве. Далее рассматривается работа именно с такими потоками. Объявление указателя на поток, который может быть направлен на жесткий диск (файл) записывается в виде: FILE *< имя_указателя>; Слово FILE – стандартное имя структурного типа, описанного в головном файле stdio.h. В этой структуре содержится вся необходимая информация для работы с файлами (например, указатель файла и др.). Следующий этап – это открытие потока с помощью стандартной функции fopen(). Форма открытия потока: < имя_указателя_на_поток> =fopen(< имя_файла>, < режим_открытия_файла>); < имя_файла> – строковая величина следующего формата. " < имя>.< расширение> " определяет имя физического файла расположенного на диске. < имя> файла – полный путь к файлу с указанием имени диска и имён папок, в которых находится этот файл. Полный путь записывается в случае, если открываемый файл находится не в одной папке с исполняемой программой. Под строкой < расширение> понимается тип файла. < режим_открытия_файла> – строковая величина, определяющая режим работы с открытым файлом. Режимы открытия файлов даны в табл.11.
Если файл не может быть открыт по какой-либо причине, то функция fopen() возвращает значение NULL. Конструкция, позволяющая открыть файл. Если файл невозможно открыть, то работа программы будет корректно завершена: FILE*pf; if((pf=fopen(" my_file.dat", " r+”)) = = NULL) { printf(" файл не открыт\n"); return 1; } Если поток (файл) открыт удачно, то можно записывать или считывать информацию с жесткого диска (файла) с помощью функций fwrite() или fread(). Формат записи этих функций выглядит следующим образом. Функция чтения блока данных из файла: i=fread(< адрес_буфера>, < объем_данных_блока>, < число_читаемых_блоков>, < указатель на поток>); Здесь i – переменная типа int; i = 1, если было произведено чтение из файла; i = 0, если чтение из файла невозможно; < адрес_буфера> – адрес переменной-буфера в ОП, по которому записываются читаемые данные из файла; < объем_данных_блока> – объем в байтах читаемых в буфер данных из файла; < число_читаемых_блоков> – количество блоков, читаемых из файла. Размер каждого блока указывается в параметре < объем_данных_блока>. < указатель на поток> – указатель на файл. Функция записи в файл: i=fwrite(< адрес_буфера>, < объем_данных_блока>, < число_записываемых_блоков>, < указатель на поток>); Здесь i – переменная типа int; i = 1, если была произведена запись в файл; i = 0, если записи не было; < адрес_буфера> – адрес переменной-буфера в ОП, из которого считываются данные в файл; < объем_данных_блока> – объем в байтах записываемых данных в файл из буфера; < число_читаемых_блоков> – количество блоков, записываемых в файл. Размер каждого блока указывается в предыдущем параметре < объем_данных_блока>. < указатель на поток> – указатель на файл. При чтении из файла поток направляется с внешнего устройства на ОП. При записи в файл поток направляется из ОП на внешнее устройство. Данные читаются и записывают в ту позицию, на которую указывает указатель файла. Форма записи функции установки указателя файла в заданную позицию: i = fseek (< указатель_на_поток>, < смещение>, < стартовая_позиция>); Здесь i – переменная типа int; i = 1, если смещение произошло, i = 0, если, например, произошло смещение за пределы файла; < указатель на поток> – указатель на открытый поток; < смещение> (длинное целое) – значение, которое определяет, на сколько байт от стартовой позиции будет смещён указатель файла. Если < смещение> больше нуля, то смещение производится к концу файла, если меньше нуля, то смещение происходит к началу файла. Нужно учитывать то, что автоматически не определяется, был ли указатель перемещен за пределы файла. < стартовая_позиция> – одна из констант: SEEK_SET (или 0) – установка указателя файла на нулевой байт файла; SEEK_CUR (или 1) – определение текущей позиции указателя файла; SEEK_END (или 2) – установка указателя файла на последний байт файла. В конце работы необходимо закрыть открытый поток с помощью стандартной функции fclose(). Формат её записи: fclose(< имя_указателя_на_поток>); Функции работы с файлами описаны в головном файле stdio.h. Примеры обращения к некоторым из них приведены в табл12.
Для нахождения длины файла в байтах можно определить конструкцию: FILE *pf; long int n; if((pf=fopen(" my_file.dat", " r+”)) = = NULL) { printf(" файл не открыт\n"); return 1; } fseek(pf, 0, SEEK_END); //указатель файла на последнем байте файла n=ftell(pf); //в переменной n – значение указателя файла, т.е. //количество байт в файле rewind(pf); //перемещение указателя файла в начало файла
|