Четверг, 28.11.2024, 19:47
Приветствую Вас, Гость |
Меню сайта
Наш опрос
Нужен ли форум на этом сайте?
Всего ответов: 1313
Статистика

Онлайн всего: 3
Гостей: 3
Пользователей: 0

Работа с файлами в СИ

Файл – это именованная область данных на каком-либо носителе информации. Типы файлов (относительно языка «СИ»):
  текстовые;
  бинарные.

 Основные операции производимые над файлами:
  Открытие файлов.
  Чтение и запись данных.
  Закрытие файлов.
 Дополнительные операции:
  Навигация по файлу.
  Обработка ошибок работы с файлами.
  Удаление и переименование файлов.
  Описание переменной

Библиотека stdio.h

  FILE *имя = NULL;
Открытие файла
 FILE *fopen(const char *filename, const char *mode);
 filename – название файла.
 mode – режим открытия.

 Функция возвращает указатель на файл, если тот был успешно открыт. В противном случае – NULL. Только имя, если файл находится в текущем каталоге. Иначе необходимо указать абсолютный или относительный путь к файлу.
Примеры:
 "data.txt”
 "..\\files\\data.txt"
 "d:\\temp\\data.txt"
Режимы открытия файлов с СИ

r
только чтение
w
Только запись. Если файл существовал, то он переписывается.
a
Добавление: открытие файла для записи в конец, или создание файла.
r+
Открывает файл для обновления (чтение и запись).
w+
Открывает файл для обновления (чтение и запись), переписывая файл, если он существует.
a+
Открывает файл для записи в конец файла или для чтения.


Перенаправление потоков
 FILE * freopen(const char *filename, const char *mode, FILE *stream);

Функция возвращает:
 Указатель на файл – все нормально,
 NULL – ошибка переопределения.

Закрытие файла
 int fclose(FILE *stream);
 stream - указатель на открытый файл.

Функция возвращает:
 0 – файл успешно закрыт.
 1 – произошла ошибка закрытия файла.

Проверка на достижение конца файла
 int feof(FILE *stream);
 stream - указатель на открытый файл.

Функция возвращает:
 0 – если конец файла еще не достигнут.
 !0 – достигнут конец файла.

Открытие текстовых файлов
Во втором параметре дополнительно указывается символ t (необязательно):
 rt, wt, at, rt+, wt+, at+
Чтение из текстового файла

Форматированное чтение
 int fscanf(FILE *stream, const char * format, [arg] ...);

Функция возвращает:
 >0 – число успешно прочитанных переменных,
 0 – ни одна из переменных не была успешно прочитана,
 EOF – ошибка или достигнут конец файла.
Чтение строки
 char * fgets(char * buffer, int maxlen, FILE *stream);

Функция возвращает:
 buffer – все нормально,
 NULL – ошибка или достигнут конец файла.
Чтение строки
 char * fgets(char * buffer, int maxlen, FILE *stream);

Функция возвращает:
 buffer – все нормально,
 NULL – ошибка или достигнут конец файла.
Чтение символа
 int fgetc(FILE *stream);
Функция возвращает:
 код символа – если все нормально,
 EOF – если ошибка или достигнут конец файла.
Помещение символа обратно в поток
 int ungetc(int c, FILE *stream);
Функция возвращает:
 код символа – если все успешно,
 EOF – произошла ошибка.
Запись в текстовый файл в СИ

Форматированный вывод
 int fprintf(FILE *stream, const char *format, [arg] ...);
Функция возвращает:
 число записанных символов – если все нормально,
 отрицательное значение – если ошибка.
Запись строки
 int fputs(const char *string, FILE *stream);
Функция возвращает:
 число записанных символов – все нормально,
 EOF – произошла ошибка.
Запись символа
 int fputc(int c, FILE *stream);
Функция возвращает:
 код записанного символа – все нормально,
 EOF – произошла ошибка.
Открытие бинарных файлов
 Во втором параметре дополнительно указывается символ b (обязательно):rb, wb, ab, rb+, wb+, ab+
Чтение из бинарных файлов
 size_t fread(void *buffer, size_t size, size_t num,FILE *stream);
Функция возвращает количество прочитанных блоков. Если оно меньше num, то произошла ошибка или достигнут
конец файла.

Запись в бинарный файл
 size_t fwrite(const void *buffer, size_t size, size_t num, FILE *stream);
Функция возвращает количество записанных блоков. Если оно меньше num, то произошла ошибка.
Навигация по файлу

Чтение текущего смещения в файле:
 long int ftell(FILE *stream);
Изменение текущего смещения в файле:
 int fseek(FILE *stream, long int offset, int origin);

 SEEK_SET (0) – от начала файла.
 SEEK_CUR (1) – от текущей позиции.
 SEEK_END (2) – от конца файла.
Функция возвращает:
 0 – все нормально,
 !0 – произошла ошибка.
Перемещение к началу файла:
 void rewind(FILE *stream);
Чтение текущей позиции в файле:
 int fgetpos(FILE *stream, fpos_t *pos);
Установка текущей позиции в файле:
 int fsetpos(FILE *stream, const fpos_t *pos);
Функции возвращают:
 0 – все успешно,
 !0 – произошла ошибка.
Структура fpos_t:
 typedef struct fpos_t {
  long off;
  mbstate_t wstate;
 } fpos_t;

Получение признака ошибки:
 int ferror(FILE *stream);
Функция возвращает ненулевое значение, если возникла ошибка.
Функция сброса ошибки:
 void clearerr(FILE *stream);
Функция вывода сообщения об ошибке:
 void perror(const char *string);
Буферизация

Функция очистки буфера:
 int fflush(FILE *stream);
Функция возвращает:
 0 – все нормально.
 EOF – произошла ошибка.
Функция управления буфером:
 void setbuf(FILE *stream, char * buffer);

Создает буфер размером BUFSIZ. Используется до ввода или вывода в поток.
Временные файлы

Функция создания временного файла:
 FILE * tmpfile(void);
Создает временный файл в режиме wb+. После закрытия файла, последний автоматически удаляется.
Функция генерации имени временного файла:
 char * tmpnam(char *buffer);
Удаление и переименование

Функция удаления файла:
 int remove(const char *filename);
Функция переименования файла:
 int rename(const char *fname, const char *nname);
Функции возвращают:
 0 – в случае успеха,
 !0 – в противном случае.

Примеры решения задач по файлам СИ
Следующая статья о указателях в СИ
Форма входа
Поиск
Мы в сети
Реклама
Для того чтобы не видеть рекламу в правом верхнем углу сайта пройдите простую процедуру регистрации
ФОРУМ
У нас наконецто появился форум! Добро пожаловать! Будьте первыми, задайте направление форуму! =)
--- Не стесняемся - заходим на форум! ---