Содержание
- 2. Понятие файла в языке Си Файл - это упорядоченная последовательность однотипных компонентов, расположенных на внешнем носителе.
- 3. Буферизация ввода-вывода Считываемая и записываемая информация представляет собой последовательность байтов - "поток" (stream). Поток – это
- 4. Текстовый и бинарный режим работы с файлами Библиотека stdio.h поддерживает текстовые и бинарные (двоичные) потоки. Текстовый
- 5. Функция fopen Прежде чем читать или записывать информацию в файл, он должен быть открыт функцией fopen
- 6. Режимы открытия файла. r - открыть существующий файл для чтения; w - создать новый файл для
- 7. Примеры открытия файлов FILE *f_in, *f_out; f_in = fopen ("My_file1","r"); f_out = fopen ("My_file2","w");
- 8. Функция fclose После окончания работы с файлом он должен быть закрыт. Закрытие файла (текстового или бинарного)
- 9. Проверка признака конца файла При каждой операции ввода/вывода происходит перемещение указателя текущей позиции в файле, в
- 10. Функции ввода/вывода. Функции fgetc() и fputc(). Простейший способ выполнить чтение из файла или запись в файл
- 11. Функции fgetc() и fputc(). Пример 1. Текст из файла my_char.txt выводится на экран. Если файл не
- 12. Функции getc() и putc(). Пример 2. Записать в файл буквы, вводимые с клавиатуры. Ввод продолжается до
- 13. Функции fscanf() и fprintf() Функции fscanf() и fprintf() выполняют форматированный ввод/вывод. Чтение из файла выполняет функция
- 14. Примеры программ, использующих функции fscanf() и fprintf(). Пример 1. В программе создается массив, состоящий из четырех
- 15. Примеры программ, использующих функции fscanf() и fprintf(). #include int main() { int S=0, count=0, numb; FILE
- 16. Примеры программ, использующих функции fscanf() и fprintf(). #include #include int main() { int bal; char name[15];
- 18. Скачать презентацию
Понятие файла в языке Си
Файл - это упорядоченная последовательность однотипных компонентов,
Понятие файла в языке Си
Файл - это упорядоченная последовательность однотипных компонентов,
Файлы предназначены только для хранения информации, а обработка этой информации осуществляется программами.
Использование файлов целесообразно в случае:
долговременного хранения данных;
доступа различных программ к одним и тем же данным;
обработки больших массивов данных, которые невозможно целиком разместить в оперативной памяти компьютера.
Файл, не содержащий ни одного элемента, называется пустым.
Создается файл путем добавления новых записей в конец первоначально пустого файла.
Длина файла, т.е. количество элементов, не задается при определении файла.
В языке Си отсутствуют операторы для работы с файлами. Все необходимые действия выполняются с помощью функций, включенных в стандартную библиотеку ввода-вывода языка Си (stdio.h - standart input output).
Буферизация ввода-вывода
Считываемая и записываемая информация представляет собой последовательность байтов - "поток"
Буферизация ввода-вывода
Считываемая и записываемая информация представляет собой последовательность байтов - "поток"
Поток – это логическое устройство, являющееся источником или получателем данных.
В зависимости от того, откуда поступает считываемая информация или куда направляется записываемая информация, поток связывается с соответствующим устройством ввода вывода (клавиатура, дисплей, принтер и т.п.) или с именованной областью внешней памяти – файлом, если требуется долговременно хранить информацию либо получить доступ к хранимой информации.
При организации ввода-вывода в С используется буферизация, то есть обмен информацией между программой и внешним устройством происходит не непосредственно, а через буфер – специально выделяемую системой область оперативной памяти.
Буферизация ускоряет работу программы из-за уменьшения количества обращений к внешним устройствам.
В библиотеке описана константа BUFSIZE, величина которой 512:
#define BUFSIZE 512
Для изменения размера буфера предназначены функции setbuf() или setvbuf().
Текстовый и бинарный режим работы с файлами
Библиотека stdio.h поддерживает текстовые и
Текстовый и бинарный режим работы с файлами
Библиотека stdio.h поддерживает текстовые и
Текстовый поток – это последовательность строк, каждая из которых заканчивается символом ‘\n’. Операционная среда может потребовать коррекции текстового потока. Например, при вводе текстового потока система преобразует символы возврат каретки 0x13 и перевод строки 0x10 в одиночный символ ‘\n’. При обнаружении в текстовом файле символа с кодом 26 (0x26), т.е. признака конца файла, чтение файла в текстовом режиме заканчивается, хотя файл может иметь продолжение. При выводе текстового потока в среду операционной системы происходит обратное преобразование.
Бинарный поток – это последовательность не преобразуемых байтов, представляющих собой некоторые промежуточные данные, которые обладают тем свойством, что если их записать, а затем прочесть той же системой ввода-вывода, то будет получена информация, совпадающая с исходной.
Функция fopen
Прежде чем читать или записывать информацию в файл, он должен
Функция fopen
Прежде чем читать или записывать информацию в файл, он должен
В stdio.h заданы 3 предопределенных потока : stdin (стандартный поток ввода), stdout (стандартный поток вывода), stderr (стандартный поток ошибок)
Вывод данных через stdout и stderr по умолчанию осуществляется на консоль. Ввод данных через stdin по умолчнию осуществляется через клавиатуру.
Предопределенные потоки всегда открыты.
При открытии файла указатель на файл связывается с конкретным файлом на диске (Если файл не может быть открыт по какой-либо причине, функция возвращает NULL. ) :
FILE *fp;
fp = fopen(“спецификация файла”, "способ использования файла");
“Спецификация файла” (т.е. имя файла и путь к нему) может, например, иметь вид:
"c:\\my_prog.txt" - для файла my_prog.txt на диске с: .
“Способ использования файла” - определяет режим открытия файла.
Режимы открытия файла.
r - открыть существующий файл для чтения;
w -
Режимы открытия файла.
r - открыть существующий файл для чтения; w -
Строки вида r+b можно записывать и в другой форме: rb+.
Примеры открытия файлов
FILE *f_in, *f_out;
f_in = fopen ("My_file1","r");
f_out = fopen ("My_file2","w");
Примеры открытия файлов
FILE *f_in, *f_out;
f_in = fopen ("My_file1","r");
f_out = fopen ("My_file2","w");
Функция fclose
После окончания работы с файлом он должен быть закрыт. Закрытие
Функция fclose
После окончания работы с файлом он должен быть закрыт. Закрытие
fclose(FILE *fp);
При этом разрывается связь указателя на файл c внешним набором данных. Освободившийся указатель можно использовать для другого файла.
При успешном завершении операции функция fclose( ) возвращает значение нуль. Любое другое значение свидетельствует об ошибке.
Пример:
fclose(f_in);
Проверка признака конца файла
При каждой операции ввода/вывода происходит перемещение указателя текущей
Проверка признака конца файла
При каждой операции ввода/вывода происходит перемещение указателя текущей
Вызов функции:
if (! feof(f_in))…
проверяет, что конец файла еще не достигнут.
Функции ввода/вывода. Функции fgetc() и fputc().
Простейший способ выполнить чтение из файла или запись в
Функции ввода/вывода. Функции fgetc() и fputc().
Простейший способ выполнить чтение из файла или запись в
Функция getc() выбирает из файла очередной символ; ей нужно только знать указатель на файл:
char Symb = getc(f_in);
Если при обработке достигается конец файла, то функция getc() возвращает значение EOF(end of file).
Функция putc() заносит значение символа Symb в файл, на который указывает f_out. Формат вызова функции:
putc(Symb,f_out);
Функции fgetc() и fputc().
Пример 1. Текст из файла my_char.txt выводится на экран. Если файл не найден, на
Функции fgetc() и fputc().
Пример 1. Текст из файла my_char.txt выводится на экран. Если файл не найден, на
#include
int main(void)
{
FILE *ptr;
unsigned char ch;
if ((ptr=fopen("my_char.txt","r"))!=NULL)
{
ch=fgetc(ptr);
while (!feof(ptr))
{
printf("%c",ch);
ch=fgetc(ptr);
}
fclose(ptr);
}
еlse printf("\nFile not found!");
return 0;
}
В этом примере для чтения из файла используется переменная ptr. При открытии файла производится проверка. Если переменной ptr присвоено значение NULL, то файл не найден; на экран выводится соответствующее сообщение, и программа завершается. Если ptr получила ненулевое значение, то файл открыт. Далее выполняется чтение символов из файла до тех пор, пока не будет достигнут конец файла (!feof(ptr)). Прочитанные символы помещаются в переменную ch, а затем выводятся на экран.
Функции getc() и putc().
Пример 2. Записать в файл буквы, вводимые с клавиатуры.
Ввод продолжается до нажатия
Функции getc() и putc().
Пример 2. Записать в файл буквы, вводимые с клавиатуры.
Ввод продолжается до нажатия
(ввод символа EOF – конца файла):
#include
int main(void)
{
char c;
FILE *out;
out=fopen("Liter","w");
while ((c=getch( ) )!=EOF)
fputc(c,out);
fclose(out);
return 0;
}
Функции fscanf() и fprintf()
Функции fscanf() и fprintf() выполняют форматированный ввод/вывод.
Чтение из файла выполняет функция fscanf():
fscanf(f_in,[строка формата],[список адресов переменных]);
Функция возвращает количество введенных значений или EOF.
Запись в
Функции fscanf() и fprintf()
Функции fscanf() и fprintf() выполняют форматированный ввод/вывод.
Чтение из файла выполняет функция fscanf():
fscanf(f_in,[строка формата],[список адресов переменных]);
Функция возвращает количество введенных значений или EOF.
Запись в
fprintf(f_out,[строка формата],[список переменных, констант]);
Функция возвращает количество выведенных байт (символов) или EOF.
Строка формата функций fscanf() и fprintf() формируется так же, как
при консольном вводе/выводе функциями printf() и scanf().
Следует заметить, что вызов функции
fscanf(stdin,[строка формата],[список адресов переменных]);
эквивалентен вызову
scanf([строка формата],[список адресов переменных]);
Аналогично,
fprintf(stdout, [строка формата],[список переменных, констант]);
эквивалентно
printf([строка формата],[список переменных, констант]);
Примеры программ, использующих функции fscanf() и fprintf().
Пример 1. В программе создается массив, состоящий из
Примеры программ, использующих функции fscanf() и fprintf().
Пример 1. В программе создается массив, состоящий из
#include
#define n 4
int main() {
int i=0;
int array[n]={4,44,446,4466};
FILE *out;
out=fopen("num_arr.txt","w");
for(;i
fclose(out);
return 0; }
В результате выполнения программы в файл num_arr.txt будет помещена
следующая информация:
Примеры программ, использующих
функции fscanf() и fprintf().
#include
int main() {
int S=0, count=0, numb;
FILE *in;
if ((in=fopen("num_arr.txt","r"))!=NULL)
{
while (!feof(in))
{
fscanf(in,"%d",&numb);
S+=numb;
count++;
printf("%d\n", numb);
}
double aver=(double)S/count;
printf("Average=%f\n",
Примеры программ, использующих
функции fscanf() и fprintf().
#include
int main() {
int S=0, count=0, numb;
FILE *in;
if ((in=fopen("num_arr.txt","r"))!=NULL)
{
while (!feof(in))
{
fscanf(in,"%d",&numb);
S+=numb;
count++;
printf("%d\n", numb);
}
double aver=(double)S/count;
printf("Average=%f\n",
fclose(in);
}
else
printf("\nФайл не найден!");
return 0; }
Пример 2. Имеется файл данных, содержащий целые числа, разделенные пробелами. Количество чисел в файле неизвестно. Требуется найти среднее арифметическое значение этих чисел.
Чтение чисел из файла выполняется в переменную numb до тех пор, пока не будет достигнут конец файла. Одновременно ведется подсчет количества прочитанных символов в переменной count и накопление суммы прочитанных чисел в переменной S. Переменные S и count целые, поэтому для правильного вычисления среднего арифметического, необходимо выполнить преобразование одной из этих переменных в формат double.
Примеры программ, использующих
функции fscanf() и fprintf().
#include
#include
int main() {
int bal;
Примеры программ, использующих
функции fscanf() и fprintf().
#include
#include
int main() {
int bal;
if ((file = fopen("1.txt","w")) == NULL) printf("Файл невозможно открыть или создать\n"); else{ for(;;){ scanf ("%d%s", &bal, name); if (bal == 0) break; fprintf(file,"%d %s\n", bal, name); } } fclose(file);
return 0; }
Пример 3. Ввод имени и балла.
FILE *file;
объявляем указатель на структуру File ( дескриптор файла ).
if ((file = fopen("1.txt","w")) == NULL)
функция fopen принимает два параметра.
Первый - это имя файла,
второй - режим работы с файлом, в котором он будет открыт.
В нашем режиме, если файл не существует, то он создается,
а если файл уже был, то его содержимое полностью стирается.
Эта функция возвращает указатель на структуру FILE ,
т.е. теперь мы сможем управлять созданным файлом при помощи нашего указателя file.
Оператор if тут используется, так как идет проверка
указателя на NULL, а NULL может быть, только если файл мы не смогли открыть.
fprintf(file,"%d %s\n", bal, name);
оператор записывает данные в файл.
Принцип действия тот же, какой и у оператора printf, только тут
в начале указывается указатель на файл , в который будет производится запись данных.
fclose(file);
раз данные мы записали и файл нам больше не нужен,
то смело может закрывать его, тем самым освобождая ресурсы.