Содержание
- 2. Введение Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки как
- 3. Введение Для файлов определен маркер или указатель чтения-записи данных, который определяет текущую позицию доступа к файлу.
- 4. Открытие файла Каждому файлу в программе присваивается внутреннее логическое имя, используемое в дальнейшем при обращении к
- 5. Открытие файла struct FILE { };
- 6. Открытие файла Прежде чем начать работать с файлом, т.е. получить возможность чтения или записи информации в
- 7. Открытие файла Второй параметр – строка, в которой задается режим доступа к файлу. Возможные значения данного
- 8. Открытие файла По умолчанию файл открывается в текстовом режиме. Текстовый режим отличается от двоичного тем, что
- 9. Закрытие файла После работы с файлом доступ к нему необходимо закрыть с помощью функции int fclose
- 10. Временные файлы В языке Си имеется возможность работы с временными файлами, которые нужны только в процессе
- 11. Запись-чтение информации Действия по чтению-записи данных в файл операции посимвольного ввода-вывода операции построчного ввода-вывода операции ввода-вывода
- 12. Запись-чтение информации #include void main(void) { FILE *f1; int a=2, b=3; if( ! (f1 = fopen(“d:\\work\\f_rez.txt”,”w+t”)
- 13. Запись-чтение информации Создание текстовых результирующих файлов обычно необходимо для оформления отчетов, различных документов, а также других
- 14. Позиционирование в файле Каждый открытый файл имеет скрытый указатель на текущую позицию в нем. При открытии
- 15. Позиционирование в файле Таким образом, смещение может быть как положительным, так и отрицательным, но нельзя выходить
- 17. Скачать презентацию
Введение
Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый
Введение
Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый
Виды файлов
Текстовые файлы представляют собой последовательность ASCII символов и могут быть просмотрены и отредактированы с помощью любого текстового редактора. Эта последовательность символов разбивается на строки символов, при этом каждая строка заканчивается двумя кодами «перевод строки», «возврат каретки»: 13 и 10 (0xD и 0xA).
Бинарные (двоичные) файлы представляют собой последовательность данных, структура которых определяется програмно.
В языке Си не предусмотрены никакие заранее определенные структуры файлов. Все файлы рассматриваются компилятором как последовательность (поток байт) информации.
Введение
Для файлов определен маркер или указатель чтения-записи данных, который определяет текущую
Введение
Для файлов определен маркер или указатель чтения-записи данных, который определяет текущую
В языке Си имеется большой набор функций для работы с файлами, большинство которых находятся в библиотеках stdio.h и io.h.
При этом потоки данных, с которыми работают функции ввода-вывода данных по умолчанию, буферизированы. Это означает, что при открытии потока с ним автоматически связывается определенный участок ОП, который и называется буфером. Все операции чтения-записи ведутся через этот буфер. Его размер фиксирован специальной константой BUFSIZ, которая определена в файле stdio.h как 512 (хотя програмно ее можно изменять).
Открытие файла
Каждому файлу в программе присваивается внутреннее логическое имя, используемое в
Открытие файла
Каждому файлу в программе присваивается внутреннее логическое имя, используемое в
Логическое имя (идентификатор файла) – это указатель на файл, т.е. на область памяти, где содержится вся необходимая информация о файле.
Формат объявления указателя на файл:
FILE *ID_указателя_на_файл;
FILE – идентификатор структурного типа, описанный в стандартной библиотеке stdio.h
Данная структура содержит
следующую информацию
Открытие файла
struct FILE {
};
Открытие файла
struct FILE {
};
Открытие файла
Прежде чем начать работать с файлом, т.е. получить возможность чтения
Открытие файла
Прежде чем начать работать с файлом, т.е. получить возможность чтения
FILE* fopen(char * ID_файла, char *режим);
Данная функция берет внешнее представление – физическое имя файла на носителе (дискета, винчестер) и ставит ему в соответствие логическое имя (программное имя – указатель файла).
Физическое имя, т.е. ID файла и путь к нему задается первым параметром – строкой, например, “g:Mas_dat.dat” – файл с именем Mas_dat и расширением dat, находящийся на носителе, “d:\\work\\Sved.txt” – файл с именем Sved и расширением txt, находящийся на винчестере в каталоге work.
При успешном открытии функция fopen возвращает указатель на файл (в дальнейшем – указатель файла). При ошибке возвращается NULL. Данная ситуация обычно возникает, когда неверно указывается путь к открываемому файлу, например, если указать путь, запрещенный для записи.
Второй параметр – строка, в которой задается режим доступа к файлу.
Открытие файла
Второй параметр – строка, в которой задается режим доступа к
Открытие файла
Второй параметр – строка, в которой задается режим доступа к
Возможные значения данного параметра:
w – файл открывается для записи (write); если файла с заданным именем нет, то он будет создан; если же такой файл уже существует, то перед открытием прежняя информация уничтожается;
r – файл открывается для чтения (read); если такого файла нет, то возникает ошибка;
a – файл открывается для добавления (append) новой информации в конец;
r+ (w+) – файл открывается для редактирования данных, т.е. возможны и запись, и чтение информации;
a+ – то же, что и для a, только запись можно выполнять в любое место файла (доступно и чтение файла);
t – файл открывается в текстовом режиме;
b – файл открывается в двоичном режиме;
Последние два режима используются совместно с рассмотренными выше. Возможны следующие комбинации режимов доступа: “w+b”, “wb+”, “rw+”, “w+t”, “rt+”.
FILE* fopen(char * ID_файла, char *режим);
Открытие файла
По умолчанию файл открывается в текстовом режиме.
Текстовый режим отличается
Открытие файла
По умолчанию файл открывается в текстовом режиме.
Текстовый режим отличается
FILE *f; //объявляется указатель на файл f;
f = fopen (" d:\\work\\Dat_sp.dat ", "w"); //открывается для записи файл с логическим именем f, имеющий физическое имя Dat_sp.dat и находящийся на диске d в каталоге work, или более кратко:
FILE *f = fopen ("d:\\work\\Dat_sp.dat", "w");
Пример
Закрытие файла
После работы с файлом доступ к нему необходимо закрыть с
Закрытие файла
После работы с файлом доступ к нему необходимо закрыть с
int fclose (указатель файла);
Для закрытия нескольких файлов введена функция
void fcloseall (void);
Если требуется изменить режим доступа к открытому в настоящий момент файлу, то его необходимо сначала закрыть, а затем вновь открыть с другими правами доступа. Для этого используется функция
FILE* freopen (char *ID_файла, char *режим, FILE *указатель_файла);
Данная функция сначала закрывает файл, заданный в третьем параметре (указатель файла), как это выполняет функция fclose, а затем выполняет действия, аналогичные функции fopen, используя указанные первый и второй параметры (открывает файл с ID_файла и правами доступа режим).
Временные файлы
В языке Си имеется возможность работы с временными файлами, которые
Временные файлы
В языке Си имеется возможность работы с временными файлами, которые
FILE* tmpfile (void);
Данная функция создает на диске временный файл с правами доступа w+b. После завершения работы программы или закрытия этого (временного) файла он автоматически удаляется
Запись-чтение информации
Действия по чтению-записи
данных в файл
операции посимвольного
ввода-вывода
операции построчного
ввода-вывода
операции
Запись-чтение информации
Действия по чтению-записи
данных в файл
операции посимвольного
ввода-вывода
операции построчного
ввода-вывода
операции
по блокам
Для работы с текстовыми файлами в библиотеке языка Си содержится достаточно много функций, самыми распространенными из которых являются функции
fprintf
fscanf
fgets
fputs
Формат параметров этих функций практически такой же, как и формат рассмотренных ранее функций printf, scanf, gets и puts
Отличие состоит в том, что printf и другие функции работают по умолчанию с экраном монитора и клавиатурой, а функции fprintf и другие – с файлом, указатель которого является одним из параметров этих функций.
Запись-чтение информации
#include
void main(void)
{
FILE *f1;
int a=2, b=3;
if( ! (f1 = fopen(“d:\\work\\f_rez.txt”,”w+t”)
Запись-чтение информации
#include
void main(void)
{
FILE *f1;
int a=2, b=3;
if( ! (f1 = fopen(“d:\\work\\f_rez.txt”,”w+t”)
puts(“Open File Error!”);
return; // exit(1);
}
fprintf(f1,”\t Файл результатов \n”);
fprintf(f1,” %d плюс %d = %d\n”, a, b, a+b);
fclose(f1);
}
Пример
Просмотрев содержимое файла любым текстовым редактором, можно убедиться, что данные в нем располагаются точно так, как на экране, если воспользоваться функцией printf с такими же списками параметров.
Запись-чтение информации
Создание текстовых результирующих файлов обычно необходимо для оформления отчетов, различных
Запись-чтение информации
Создание текстовых результирующих файлов обычно необходимо для оформления отчетов, различных
Бинарные (двоичные) файлы обычно используются для организации баз данных, состоящих, как правило, из объектов структурного типа. При чтении-записи бинарных файлов удобнее всего пользоваться функциями fread и fwrite, которые выполняют ввод-вывод данных блоками.
Такой способ обмена данными требует меньше времени.
unsigned fread (void *p, unsigned size, unsigned n, FILE *f);
Данная функция выполняет считывание из файла f n блоков размером size байт каждый в область памяти, адрес которой p. В случае успеха функция возвращает количество считанных блоков. При возникновении ошибки или по достижении признака окончания файла – значение EOF (End Of File – признак окончания файла).
Обратное действие выполняет функция, при вызове которой в файл f будет записано n блоков размером size байт каждый из области памяти, начиная с адреса p
unsigned fwrite (void *p, unsigned size, unsigned n, FILE *f);
Позиционирование в файле
Каждый открытый файл имеет скрытый указатель на текущую позицию
Позиционирование в файле
Каждый открытый файл имеет скрытый указатель на текущую позицию
При каждом выполнении функции чтения или записи указатель смещается на количество прочитанных или записанных байт, т.е. устанавливается после прочитанного или записанного блока данных в файле – это последовательный доступ к данным
В языке Си/С++ можно установить указатель на некоторую заданную позицию в файле. Для этого используют стандартную функцию fseek, которая позволяет выполнить чтение или запись данных в произвольном порядке
int fseek(FILE *f, long size, int code);
Значение параметра size задает количество байт, на которое необходимо сместить указатель в файле f, в направлении параметра code, который может принимать следующие значения:
Позиционирование в файле
Таким образом, смещение может быть как положительным, так и
Позиционирование в файле
Таким образом, смещение может быть как положительным, так и
В случае успеха функция возвращает нулевое значение, а в случае ошибки (например, попытка выхода за пределы файла) – единицу.
Доступ к файлу с использованием функции позиционирования (fseek) называют произвольным доступом.
Иногда нужно определить текущее положение в файле. Для этого используют функцию со следующей декларацией
long ftell(FILE *f);
Функция возвращает значение указателя на текущую позицию в файле или –1 в случае ошибки