МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Оси и плоскости тела человека Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


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

Двоичный режим обмена с файлами.





Потоковый ввод-вывод.

Открытие и закрытие потока.

Двоичный режим обмена с файлами.

Строковый обмен с файлами.

Режим форматного обмена с файлами.

Позиционирование в потоке.

Потоковый ввод-вывод.

Библиотека языка Си поддерживает три уровня ввода-вывода:

1. Потоковый ввод-вывод

2. Ввод-вывод нижнего уровня

3. Ввод-вывод для консоли и портов

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

Поток – это файл вместе с предоставляемыми средствами буферизации.

При работе с потоком можно производить следующие действия:

· Открывать и закрывать потоки;

· Вводить и выводить данные;

· Анализировать ошибки потокового ввода-вывода и условие достижения конца потока (конца файла);

· Управлять буферизацией потока и размером буфера;

· Получать и устанавливать указатель (индикатор) текущей позиции в потоке.

 

Открытие и закрытие потока.

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

При открытии потока в программу возвращается указатель на поток, являющийся указателем на объект структурного типа FILE.

#include <stdio.h>

FILE *fp ; /* объявлен указатель на поток *fp */

Указатель на поток приобретает значение в результате выполнения функции открытия потока:

fp=fopen (имя файла, режим открытия) ;

 

Например: fp=fopen (“my_text.txt”, “r”) ;

При выполнении функции fopen( ) происходит выделение динамической памяти.

Файл, связанный с потоком, можно открыть в одном из следующих режимов:

w” – новый текстовый файл открывается для записи. Если файл уже существовал, то предыдущее содержимое стирается, файл создается заново;

r” – существующий текстовый файл открывается только для чтения;

a” – текстовый файл открывается (или создается, если файла нет) для добавления в конец файла новой порции информации;

w+” – новый текстовый файл открывается для записи и последующих многократных исправлений. Если файл уже существует, то предыдущее содержимое стирается;

r+” – существующий текстовый файл открывается как для чтения, так и для записи в любом месте файла (однако в этом режиме невозможна запись в конец файла);

a+” – текстовый файл открывается или создается (если файла нет) и становится доступным для изменений (записи, чтения в любом месте). При этом можно открыть существующий файл, не уничтожая его содержимого; можно вести запись в конец файла, увеличивая его размеры.

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

Для вывода на экран монитора сообщения об ошибке при открытии потока может использоваться библиотечная функция perror( ):

if (( fp=fopen(“t.txt”,”w’))==NULL)

{

perror(“ошибка при открытии файла t.txt \n”);

}

Открытые на диске файлы после окончания работы с ними необходимо закрыть с помощью библиотечной функции:

int fclose (указатель на поток) ;

Открытый файл можно открыть повторно только после того, как файл будет закрыт с помощью функции fclose( ).

Двоичный режим обмена с файлами.

Поток можно открыть в текстовом либо двоичном (бинарном) режиме. Двоичный режим обмена с файлами организуется с помощью функций:

int getc (FILE *stream) ;

int putc (int c, FILE *stream) ;

stream – указатель на поток;

с – целочисленная переменная для приема очередного символа из файла или для записи ее значения в файл.

 

Пример: Ввести с клавиатуры символы и записать их в файл

(‘.’ – признак завершения ввода).

/* ввод символов с клавиатуры и запись их в файл */

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

int main( )

{

FILE *fp;

int c;

char fname[20];

clrscr();

puts("Введите имя файла");

gets(fname);

fp=fopen(fname, "w");

if (fp==NULL) {puts("Ошибка");exit(1);}

puts("Введите символы");

while ((c=getchar())!='.') putc(c, fp);

fclose(fp);

fp=fopen (fname, "r");

puts ("\n Содержимое вашего файла");

while((c=getc(fp))!=EOF)

putchar(c); /* вывод символов на экран */

fclose(fp);

getch();

return 0;

}

EOF– целая константа, определенная в stdio.h, означающая конец информации в файле.





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.