- •Лекция 4
- •Файлы
- •Текстовые и бинарные файлы
- •Вчем отличия?
- •Описание файла
- •Библиотечные функции, используемые при работе с файлами.
- •Функция fopen()
- •Функция freopen()
- •const char* mode
- •Способ использования файла
- •Способ использования файла
- •Функция fclose()
- •Буферизация
- •Функция fflush()
- •Функция fflush()
- •Функция fprintf( )
- •Функция fscanf( )
- •Пример
- •Функция putchar()
- •Функция getchar( )
- •Прописные буквы в строчные:
- •Функции putc( ), fputc()
- •Функция getc( ), fgetc()
- •Функция feof( )
- •Функция puts( )
- •Функция fputs( )
- •Функция gets( )
- •Функция fgets( )
- •Пример
- •EOF ловушка
- •Функция fseek( )
- •Использование fseek( ) для печати содержимого файла
- •Функция ferror( )
- •Функция remove( )
- •Функция rewind( )
- •Функция fread( )
- •Функция fwrite( )
- •Пять стандартных файлов
- •Низкоуровневый ввод/вывод
Лекция 4
Файлы в Си (ANSI)
Файлы
Файлом называют способ хранения информации на физическом устройстве. Файл - это понятие, которое применимо ко всему - от файла на диске до терминала.
Файл представляется потоком байтов.
В языке Си отсутствуют операторы для работы с файлами. Все необходимые действия выполняются с помощью функций, включенных в стандартную библиотеку <stdio.h>. Они позволяют работать с различными устройствами, такими, как диски, принтер, коммуникационные каналы и т.д.
В Си существует два типа файлов: текстовые (text) и двоичные (binary).
Текстовые и бинарные файлы
Текстовый файл — файл, содержащий текст, разбитый на строки при помощи некоторого разделяющего символа окончания строки или последовательности
вUnix — одиночный символ перевода строки;
вMicrosoft Windows за символом перевода строки следует знак возврата каретки:
0x0D 0x0A
13 10 в десятичной системе счисления .
Двоичный (бинарный) файл — файл, из которого байты считываются и выводятся в «сыром» виде без какого-либо связывания (подстановки).
Вчем отличия?
Вчем разница между звуковым файлом и картинкой?
Втом, что первый файл интепретируется с помощью специальной программы, как звук, а второй - как картинка.
Текстовый файл интепретируется как текст, а бинарный, как набор двоичных чисел.
В текстовом файле символ "\n" переводится в "\r\n" при записи в файл.
При считывании производится обратная замена: "\r\n" "\n" .
С бинарными файлами этого не происходит.
Описание файла
Логическое имя (дескриптор файла - int) – представляет собой указатель на файл, который используется операционной системой для поддержки операций с этим файлом.
Оно определяется так: FILE *fp;
FILE - имя типа, описанное в стандартном заголовочном файле <stdio.h>,
fp - указатель на файл.
Библиотечные функции, используемые при работе с файлами.
Функция fopen( ).
Прежде чем читать или записывать информацию в файл,
он должен быть открыт и тем самым связан с потоком байтов. Это можно сделать с помощью библиотечной функции fopen( ).
Прототип функции fopen():
FILE * fopen (cost char* name, cost char* mode );
Вслучае удачного открытия файла, функция fopen() возвращает дескриптор файла, иначе – константу NULL. Она определена в файле <stdio.h> и эквивалентно 0.
Функция fopen()
Обращение к функции fopen( ): fp = fopen(спецификация файла,
способ использования файла);
Спецификация файла (имя файла и путь к нему) может, например, иметь вид: "c:\\myprog.txt" - для файла myprog.txt на диске с:.
Рекомендуется использовать следующий способ открытия файла:
if ((fp = fopen("c:\\my_prog.txt", "rt")) == NULL){ fprintf(stderr, "Открыть файл не
удалось\n");
exit(1);
}
Функция freopen()
Функция freopen применяется для перенаправления файлов, обычно стандартных файлов stdin, stdout, stderr, stdaux, stdprn в файлы, определяемые пользователем.
FILE *freopen(const char *path, const char *mode, FILE *fp);
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp;
printf("Это сообщение появится на экране.\n");
if((fp=freopen("input.txt", "w", stdout))==NULL){ printf("Не удается открыть файл.\n");
exit(1);
}
printf("Это сообщение запишется в файл input.txt."); fclose(fp);
return 0;
}
const char* mode
Внекоторых операционных системах имеются различия в работе с текстовыми и бинарными файлами.
К таким системам относятся MS DOS и MS Windows.
Втаких системах при открытии бинарного файла к строке mode следует добавлять букву "b", а при открытии текстового файла – букву "t".
Кроме того, при открытии можно разрешить выполнять как операции чтения, так и записи; для этого используется символ + .
Порядок букв в строке mode следующий: сначала идет одна из букв "r", "w", "a", затем в произвольном порядке могут идти символы "b", "t", "+".
Буквы "b" и "t" можно использовать, даже если в операционной системе нет различий между бинарными и текстовыми файлами, в этом случае они просто игнорируются
Всистеме Unix различий между текстовыми и бинарными файлами нет.
Способ использования файла
r - открыть существующий файл для чтения;
w - создать новый файл для записи (если файл с указанным именем существует, то он будет переписан);
а- дополнить файл (открыть существующий файл для записи информации, начиная с конца файла, или создать файл,
если он не существует);
r+ - открыть существующий файл для чтения и записи; w+ - создать новый файл для чтения и записи;
a+ - дополнить или создать файл с возможностью чтения и записи;
rb - открыть двоичный файл для чтения; wb - создать двоичный файл для записи; аb - дополнить двоичный файл;
r+b - открыть двоичный файл для чтения и записи; w+b - создать двоичный файл для чтения и записи; а+b - дополнить двоичный файл с предоставлением возможности чтения и записи