![]() Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Проверка достижения конца файла
Если заранее неизвестно количество значений в файле, то для считывания организовывается цикл до достижения конца файла. Способ 1. Проверка достижений конца файла с использованием функции feof() int feof(FILE *file_ptr);
· Функция feof() не проверяет положение указателя в файле, она проверяет значение .системного индикатора «конец-файла». · Большинство библиотечных функций чтения файла (особенно для ввода данных в текстовом режиме) устанавливают этот индикатор не после чтения последнего символа, а при безуспешной попытке прочитать данные из конца файла i = 0; while (!feof(fp)) { fgets(buf, sizeof(buf), fp); printf ("Line %4d: %s", i, buf); i++; } //последняя строка будет напечатана дважды Способ 2.Проверка значения, возвращаемого функцией чтения данных. #include <stdio.h> #include <stdlib.h> #define MYFILE «junk1.txt» int main(void) { FILE *fp; char buf[BUFSIZ] = "Garbage"; int i; if ((fp = fopen(MYFILE, "r")) == NULL) { return (EXIT_FAILURE); } i = 0; while (fgets(buf, sizeof(buf), fp) != NULL) { printf ("Line %4d: %s", i, buf); i++; } fclose(fp); return(0); } Перемещениепофайлу
Получение размера файла. ... intmain() { FILE * ptrFile = fopen("file.txt","rb"); if (ptrFile == NULL) exit(1); else { fseek(ptrFile, 0, SEEK_END); // указательвконецфайла long size = ftell(ptrFile); // вернуть положение указателя fclose (ptrFile); // закрытьфайл } return 0; }
Текстовые файлы, принципы работы. Процедуры и функции, ориентированные на работу с текстовыми файлами, ввод-вывод информации. Примеры. Ответ: Работа с текстовым файлом похожа работу с консолью: с помощью функций форматированного ввода мы сохраняем данные в файл, с помощью функций форматированного вывода считываем данные из файла. Основные операции для этого: 1. Открыть файл, для того, чтобы к нему можно было обращаться. Соответственно, открывать можно для чтения, записи, чтения и записи, переписывания или записи в конец файла и т.п. 2. Непосредственно работа с файлом - запись и чтение. Здесь также нужно помнить, что мы работаем не с памятью с произвольным доступом, а с буферизированным потоком. 3. Закрыть файл. Так как файл является внешним по отношению к программе ресурсом, то если его не закрыть, то он продолжит висеть в памяти, возможно, даже после закрытия программы (например, нельзя будет удалить открытый файл или внести изменения и т.п.). Форматированный ввод/вывод
Чтение/запись строк
Чтение/запись символов
«Ловушка» EOF. Распространенной ошибкой является использование fgetc()для присваивания введенного символа переменной типа charперед сравнением с EOF. EOF – отрицательное целое (int) число (обычно «-1»). Припреобразовании в char отбрасываются старшие биты,значение остается в диапазоне (0..255), т.е. сравнениепеременной c с EOF (слева) никогда не сработает и цикл будетпродолжаться вечно.
Двоичные файлы и процедуры ввода-вывода. Примеры использования. Ответ: Бинарный (двоичный) поток: · Последовательность произвольных байтов · Не рассчитан на интерпретацию в качестве последовательности текстовых символов; · Для ввода/вывода данных следует применять функции чтения/записи блоков памяти Текстовый поток: · Частный случай бинарного потока (файла); · Рассматривается как последовательность символов; · Некоторые служебные символы могут присутствовать в потоке, но не выводиться на экран; · Для чтения/записи данных необходимо применять функции, аналогичные функциям консольного ввода / вывода (fprintf / fscanf, fputs / fgets, fputc / fgetc) Двоичный ввод/вывод При использовании текстового режима работы сфайлами при вводе/выводе данных выполняетсяпреобразование из строки или в строку. Как результат: · Потеря точности для вещественных чисел; · Увеличение размера файла (каждая десятичная цифра в записи числа – отдельный ASCII-код, 8 битов); · Замедление ввода/вывода double num = 1./3.; fprintf(fp, “%f”, num); // вфайл - строка: “0.333333” Функции чтения/записи данныхв двоичном виде работают сданными в том же виде, в какомони хранятся в программе. Удобны для ввода/выводабольших объемов данных(массивов, структур и т.п.)известного размера. Для работы с файлом, открытым в двоичном режиме,рекомендуется применятьтолько функции двоичноговвода/вывода, для работы сфайлом, открытом в текстовомрежиме – функции текстовоговвода/вывода.
|
||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2018-04-12; просмотров: 562. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |