русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

ФУНКЦИИ ДЛЯ РАБОТЫ С ФАЙЛАМИ


Дата добавления: 2013-12-23; просмотров: 3098; Нарушение авторских прав


Переменная для работы с файлами описывается в виде указателя на тип FILE:

FILE *имя [= NULL];

Функция открытия файла:

FILE * fopen(const char *filename, const char *mode);

Первый параметр filename - имя файла, который необходимо открыть. Имя файла может быть указано в виде:

· только имя файла - если файл находится в текущем рабочем каталоге программы;

· абсолютный (полный) путь к файлу;

· относительный путь к файлу.

Второй параметр mode - режим открытия файла (строка). Перечень возможных режимов открытия файлов в языке С приведен в таблице 7.1. Функция возвращает указатель на файловую переменную, если удалось открыть указанный файл в заданном режиме. В противном случае (если файл открыть не удалось) функция возвращает значение NULL.

 

Таблица 7.1 - Режимы открытия файла

Функция переопределения файлового потока:

FILE * freopen(const char*filename, const char*mode,

FILE * restrict stream);

Первый параметр filename - имя файла, с которым необходимо ассоциировать существующую файловую переменную (параметр stream). Второй параметр mode - режим открытия нового файла (см. таблицу 7.1). Третий параметр stream - существующий файловый поток, который необходимо ассоциировать с новым файлом.

Функция закрывает файл, ассоциированный со stream, открывает файл, указанный в filename, и ассоциирует stream с только что открытым файлом. Функция возвращает указатель на перенаправленный файловый поток, или значение NULL - если произошла ошибка. Данная функция обычно используется для перенаправления потоков stdin, stdout, stderr.

Функция создания временного файла:

FILE * tmpfile(void);

Функция создает временный файл и возвращает указатель на файловую переменную. Файл создается в режиме «wb+». В случае ошибки функция возвращает значение NULL. Файл уничтожается после его закрытия или после завершения программы.



Функция закрытия файла:

int fclose(FILE *stream);

В качестве параметра stream передается указатель на открытый ранее файловый поток. Функция осуществляет закрытие файла и возвращает значение ноль, если закрытие успешно и значение EOF (end of file, целочисленное значение: -1) - если нет.

Функция проверки достижения конца файла:

intfeof(FILE *stream);

В параметре stream передается указатель на файловый поток. Функция возвращает не нулевое значение, если достигнут конец файла и нулевое значение - если нет.

Рассмотрим функции чтения и записи текстовых файлов. Они очень похожи на стандартные функции ввода и вывода.

Функция форматированного ввода из файла:

int fscanf(FILE * restrict stream,

const char * restrict format,

[argument] ...);

В первом параметре stream передается указатель на файловый поток, из которого необходимо произвести чтение. Остальные параметры функции аналогичны параметрам функции scanf. Функция возвращает количество успешно считанных и расположенных значений. В случае возникновения ошибки или достижения конца файла функция возвращает значение EOF.

Функция форматированного вывода в файл:

int fprintf(FILE * restrict stream,

const char * restrict format,

[argument] ...);

В первом параметре stream передается указатель на файловый поток, в который необходимо вывести значения. Остальные параметры функции аналогичны параметрам функции printf. Функция возвращает количество выведенных символов в поток. В случае возникновения ошибки - отрицательное значение.

Функция чтения строки из файла:

char * fgets(char * restrict buffer, intmaxlen,

FILE * restrict stream);

В первом параметре buffer передается указатель на буфер ввода (куда должна быть записана строка). Во втором параметре maxlen передается максимальное количество символов для считывания. В третьем параметре stream передается указатель на файловый поток, из которого необходимо произвести чтение. Функция осуществляет считывание строки в переменную buffer из потока stream до первого символа перевода строки (\n) или до конца файла. Если длина строки превышает указанное во втором параметре значение, то строка усекается. Символ перевода строки, если он присутствует, дописывается в конец считанной строки. Функция возвращает значение buffer или значение NULL, если произошла ошибка или была попытка чтения из конца файла.

Функция записи строки в файл:

int fputs(const char* restrict string,

FILE * restrict stream);

В первом параметре string передается строка, которую необходимо записать в файл. Во втором параметре stream передается указатель на файловый поток, в который необходимо вывести строку. Функция возвращает положительное значение при успешном выполнении, и значение EOF - при ошибке.

Функция чтения символа из файла:

int fgetc(FILE *stream);

В параметре stream передается указатель на файловый поток, из которого необходимо прочитать символ. Функция возвращает код считанного символа (положительное значение) или значение EOF - если произошла ошибка или была произведена попытка чтения из конца файла.

Функция записи символа в файл:

int fputc(int c, FILE *stream);

В первом параметре c передается код символа, который необходимо записать в файл. Во втором параметре stream передается указатель на файловый поток, в который осуществляется запись символа. Функция возвращает код записанного символа, или EOF, если произошла ошибка.

ПРИМЕЧАНИЕ: Здесь приведены только основные функции ввода и вывода в текстовые файлы. В библиотеке stdio.h содержатся и другие функции, схожие по назначению.

Далее приведены функции чтения и записи в бинарные файлы.

Функция чтения данных из бинарного файла:

size_t fread(void * restrict buffer, size_t size,

size_t num, FILE * restrict stream);

В первом параметре функции buffer передается указатель на буфер, куда должны быть записаны считанные из файла данные. Во втором параметре size передается размер (в байтах) одного значения. В третьем параметре num передается количество значений для считывания. Фактический объем данных, которые должны быть считаны, вычисляется путем перемножения второго и третьего параметров. В четвертом параметре stream передается указатель на файловый поток, из которого необходимо производить чтение данных. Функция считывает из файлового потока stream num значений, каждое из которых имеет размер size. Считанные значения располагаются последовательно в буфере buffer. Функция возвращает количество успешно считанных значений, которое может быть меньше чем num, если произошла ошибка или был достигнут конец файла.

Функция записи данных в бинарный файл:

size_t fwrite(const void * restrict buffer,

size_t size, size_t num,

FILE * restrict stream);

В первом параметре функции buffer передается указатель на буфер, откуда должны быть записаны данные в файл. Во втором параметре size передается размер (в байтах) одного значения. В третьем параметре num передается количество значений для записи. Фактический объем данных, которые должны быть записаны, вычисляется путем перемножения второго и третьего параметров. В четвертом параметре stream передается указатель на файловый поток, в который необходимо производить запись данных. Функция записывает из буфера buffer в файловый поток stream num значений, каждое из которых имеет размер size. Функция возвращает количество успешно записанных значений, которое может быть меньше чем num, если произошла ошибка.

Помимо функций чтения и записи данных в файл на практике часто используются функции навигации (перемещения) по файлу.

Функция перехода к началу файла:

void rewind(FILE *stream);

В параметре stream передается указатель на файловую переменную, к началу файла которой необходимо перейти. Функция устанавливает текущую позицию в файле на начало файла.

Функция установки позиции в файле:

int fseek(FILE *stream, long int offset, int origin);

Первый параметр stream - указатель на файловую переменную, позицию, в файле которой, необходимо изменить. Второй параметр offset - смещение (в байтах), на которое необходимо установить позицию в файле. Третий параметр origin - указывает, откуда отсчитывать смещение:

· SEEK_SET (целочисленный код - 0) - от начала файла;

· SEEK_CUR (целочисленный код - 1) - от текущей позиции в файле;

· SEEK_END (целочисленный код - 2) - от конца файла.

Функция получения текущей позиции в файле:

long int ftell(FILE *stream);

В параметре stream передается указатель на файловую переменную, позицию в файле которой, необходимо получить. Функция возвращает текущее смещение в файле (в байтах) от начала файла. Если произошла ошибка, то значение -1.

Функция чтения текущей позиции в файле:

int fgetpos(FILE * restrict stream,

fpos_t * restrict pos);

Первый параметр stream - файловый поток, позицию которого в файле необходимо получить. Второй параметр pos - указатель на структуру fpos_t, куда будет помещена информация о позиции файлового потока в файле. Функция возвращает значение ноль при успешном выполнении и не нулевое значение при ошибке.

ПРИМЕЧАНИЕ: Структура fpos_t описана в библиотеке stdio.h.

Функция установки текущей позиции в файле:

int fsetpos(FILE *stream, const fpos_t *pos);

Первый параметр stream - файловый поток, позицию которого в файле необходимо установить. Второй параметр pos - указатель на структуру fpos_t, в которой содержится информация о новой позиции файлового потока в файле. Функция возвращает значение ноль при успешном выполнении и не нулевое значение при ошибке.

ПРИМЕЧАНИЕ: Функции fgetpos и fsetpos используются вместе. Сначала считывается текущая позиция в файле с помощью функции fgetpos, а затем, после проведения операций чтения и/или записи в файл, данная позиция может быть восстановлена с помощью функции fsetpos.

В языке С файловый поток может быть буферизированным или не буферизированным. Наличие буфера ввода означает, что поступающие данные помещаются сначала в буфер, а затем, по мере потребности, передаются в программы посредством функций ввода. Наличие буфера вывода означает, что записываемые в файл данные сначала помещаются в буфер, а затем, при заполнении буфера или при закрытии потока, записываются в файл. Отсутствие буферов означает, что ввод и вывод осуществляется напрямую в файл. Для управления буферами в библиотеке stdio.h языка С присутствует несколько функций.

Функция управления буфером:

void setbuf(FILE * restrict stream,

char * restrict buffer);

Первый параметр stream - файловый поток, управление буфером которого осуществляется. Второй параметр buffer - указатель на область буфера. Если значение параметра buffer - NULL, то поток будет не буферизированным. В противном случае параметр buffer должен содержать указатель на область памяти размером BUFSIZ (мнемоническая константа, определенная в библиотеке stdio.h, стандартное значение 512). Устанавливать буфер ввода или вывода можно только до проведения операций чтения или записи данных в файловый поток (лучше сразу после его открытия).

Функция очистки буфера:

int fflush(FILE *stream);

В параметре stream передается указатель на файловый поток, буфер которого необходимо очистить. Если это поток вывода, то все данные, находящиеся в буфере, записываются в файл. Если это поток ввода, то все данные, находящиеся в буфере, уничтожаются. Функция не влияет на не буферизированные потоки. Если в качестве параметра передается значение NULL, то осуществляется очистка буферов всех буферизированных потоков. Функция возвращает значение ноль при успешном выполнении, в противном случае - значение EOF.

Также в библиотеке stdio.h реализованы две функции для работы с файлами на «верхнем» уровне (не используя файловый поток).

Функция удаления файла:

int remove(const char *filename);

В параметре filename указывается имя существующего файла, который необходимо удалить. Функция возвращает нулевое значение, если файл был успешно удален, в противном случае - значение -1.

Функция переименования файла:

int rename(const char *filename, const char *newname);

Первый параметр filename - имя существующего файла (или директории), который необходимо переименовать. Второй параметр newname - новое имя файла (или директории), файл с данным именем не должен существовать. Функция возвращает нулевое значение, если файл был успешно переименован, в противном случае - значение -1.

 



<== предыдущая лекция | следующая лекция ==>
Чтение и деталирование сборочного чертежа | ПРИМЕРЫ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.