русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Побайтная запись в файл и функция fputco


Дата добавления: 2013-12-23; просмотров: 1512; Нарушение авторских прав


Открытие(создание) нового файла и функция fopen

Работа с файлами

 

Перед началом работы с файлом его надо создать (открыть), а по окончании работы закрыть. Эти два действия выполняет программа:

Пример:

#include <stdio.h> main( )

{ FILE *f ;

f = fopen("test.dat", "w"); /*w-маленькая буква*/

fclose(f) ;

}

Перед началом работы с файлом надо создать указатель на структуру данных типа FILE, описанную в файле STDIO.H.

В нашей программе этот указатель-адрес обозначен именем f. Затем необходимо вызвать функцию fopen(), которая может создать новый файл для записи в него, либо открыть существующий на диске файл для записи или (и) чтения. После вызова этой функции создается структура типа FILE и указатель f содержит адрес начала этой структуры в памяти. Его можно распечатать как обыкновенное целое вызовом функции print("%u\n",f), которую надо вставить сразу после открытия. В оперативной памяти отводится массив размером 512 байт, который используется при обмене, данными между файлом на диске и программой. Этот массив называется буфером.

При закрытии файла память, отведенная под структуру и буфер, должна освободиться, а указатель обнулиться, что означает ни на что не указывав.

При указании режима доступа в функции fopen должны использоваться только маленькие буквы.

Задача: вывод данных в файлы символов. Для этого в Си-библиотеке имеется специальная функция fputc(c.f), где 'с' хранит код символа выводимого в файловый поток Т. Программа:

#include<stdio.h>

main()

{

FILE *f;

f = fopen ( " tes t. da. t", "w") ;

fputc("A",£) ;

fclose(f) ;

}

Эта программа содержит вызов функции fputc(). Запустив эту программу, и просмотрев текущий каталог обнаружим в нем файл TEST.DAT содержащий символ 'А'. Усовершенствуем нашу программу:



Пример 2:

#include<stdio.h>

main()

{

int n;

FILE *f;

char c='A' f = fopen ("test.da.t", "w") ;

for (n=0; n<100; n++) ;

fpv.tc(c,f) ;

fclose(f) ;

}

Для того чтобы программа печатала сто строк с одним символом А в строке в тело цикла for нужно вставить составной оператор: {fputs(c,f); fputs('\n',f);}

Побайтное чтение из файла и функции fgetc()

Научимся читать текстовые файлы. Для чтения файлов имеется специальная функция fgetc(f), которая возвращает текущий символ из файлового потока f. Рассмотрим программу:

Пример:

#include <stdio.h>

main()

{

int с;

FILE *f;

f^fopen ("'test. dat", "r"') ;

while ( ( c=f<Jetc(f)) i. =EOF)

printf("c" ,c) ;

fclose(f) ;

}

При открытии файла мы указали режим "r" - режим чтения из файла, в цикле while прочитанные символы печатаются путем вызова функции printf().

Значение оператора присваивания fgetc(f) равно символу с прочитанному из файлового потока f, т.е. при проверке while - условия каждый раз читается символ из файлового потока и сравнивается затем с признаком конца файла.

Определение конца файла. Идея заключается в том, чтобы функции fgetc(f) выдавала некоторый специальный код, который бы и означал достижение конца файла. Если функция fgetc(f) возвращает байт, то это означает утрату одного из символов, который должен быть зарезервирован как признак конца файла.

Функция fgetc(f) возвращает не байт, а целое двухбайтовое число. Пока в файле есть еще не прочитанные байты, функция возвращав двухбайтовое число, старший байт которого равен нулю, а в младшем байте находится значение прочитанного из файлового потока байта. Как только мы подошли к самому концу файла, когда уже нечего читать, обращение к функции приводит к тому, что во все биты возвращенного слов записаны единицы. В этом случае и используется старший байт.

Это не единственный случай генерации признака конца файла. В операционной системе MS-DOS принято соглашение, что признаком конца текстового файла являете символ CTRL-Z с кодом 26. Если из файла был прочитан байт, в котором хранится число 26, то функция выдает -1, что означает конец файла.

Поэтому приведенный выше метод чтения файлов годится и для чтения нетекстовых файлов. Но в этих файлах должны отсутствовать байты со значением 26, иначе чтение файл. прервется на первом встреченном байте с "CTRL+Z",

Для побайтного чтения нетекстовых файлов можно также использовать функцию fgetc(f). Но в этом случае открытие файла должно быть произведено в бинарном режиме.

Например:

fopen ("tc.exe", rb) ;

Форматная запись в файл и функция fprintf()

Существуют два способа записи чисел в файл.

Первый из них- запись чисел "живьем", то есть так, как они представляются в оперативной памяти. Чтобы так записывать числа, используя функцию fputc(f), надо эти числа разделить на байты, их составляющие, и, затем записать побайтно в файл.

Рассмотрим второй способ. Он, заключается в преобразовании числа ,представляющую его символьную строку с последующей записью её в файл, как строки символов.

Для такой форматной записи в файлы в библиотеке Си имеется специальная функция fprintf() Первый аргумент указывает файловый поток, в который будут выводиться данные. За ним идут параметры, что и в обычной функции printf(), форматная строка и выводимые переменные. Функция fprintf() преобразует указанные переменные в символьные строки и выводит их, символ за символом, в файловый поток.

Пример:

#include<stciio.h>

main()

{

int i,r;

FILE *f;

f = fopen ( "rand. da. t", "w") ;

for (i=0; i<100; i++)

{

r = = rand () ;

fprintf(f, "%d\n",r) ;

fсlose() ;

}

 

После трансляции и запуска программы в текущем каталоге должен появиться одноименный файл, хранящий сто случайных чисел.



<== предыдущая лекция | следующая лекция ==>
Вспомогательные средства | Структура данных типа file


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.15 сек.