Добавил:
ПОИТ 2016-2020 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
29.04.2018
Размер:
824.83 Кб
Скачать

Void main()

{ FILE *ut;

char SS[] = "This is… \n";

char *p; p = SS;

ut = fopen("d.txt", "w");

while ( (*p !='\0') && fputc(*(p++), ut) != EOF) ;

fclose(ut);

}

Пример

FILE *stream; char buffer[81]; int i, ch; stream = fopen( "crt_fopen.c", "r+w" );

if( stream == NULL ) exit( 0 ); ch = fgetc( stream);

for( i=0; (i < 80 ) && ( feof( stream ) == 0 ); i++ ) { buffer[i] = (char)ch;

ch = fgetc( stream ); }

Блоковый ввод-вывод

Int fread( void *ptr, int size, int n,

FILE *fp);

void *ptr – указатель на область памяти, в которой размещаются считываемые из файла данные; 

int size – размер одного считываемого элемента; 

int n – количество считываемых элементов; 

FILE *fp – указатель на файл, из которого производится считывание.

В случае успешного считывания информации функция возвращает число прочитанных элементов (а не байтов), иначе – EOF.

Int fwrite( void *ptr, int size, int n,

FILE *fp);

void *ptr – указатель на область памяти, в которой размещаются записываемые в файл данные; 

int size – размер одного записываемого элемента; 

int n – количество элементов; 

FILE *fp – указатель на файл, в который производится запись.  

В случае успешной записи информации функция возвращает число записанных элементов, иначе –  EOF.

Пример. Ввод и вывод двух структур

#include <iostream>

using namespace std;

typedef struct

{ char name[40];

Int rate;

} Emp;

Void main()

{ FILE *f;

int i; Emp ms; Emp mas[3];

f = fopen("f.dat", "w+");

if (f == NULL)

{ cout<<"File not open";

exit(1);

}

for (i = 1; i <= 2; i++) //формирование структуры ms

{ cout<<"name="; cin>>ms.name;

cout<<"rate="; cin>>ms.rate;

fwrite(&ms, sizeof(ms), 1, f); //запись

if (ferror(f) != 0)

{ cout<<"Error"; exit(2); }

}

fclose(f);

f = fopen("f.dat", "rb");

if (f == NULL)

{ cout<<"File not open"; exit(3); }

i = 0;

while (!feof(f)) //чтение структуры

{ fread(&mas[i], sizeof(Emp), 1, f);

i++;

}

fclose(f);

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

cout<<mas[i].name<<' '<<mas[i].rate <<endl;

}

Функция  void exit(int exit_code)  вызывает завершение программы. Если параметр exit_code равен нулю, предполагается нормальное завершение программы. Ненулевое значение используется для индикации ошибки.

Функция ferror(fp) тестирует поток на ошибки чтения/записи. Если в файле была обнаружена ошибка, то функция возвращает ненулевое значение.

Позиционирование в файле

Текущая позиция – это номер байта, начиная с которого производится очередная операция чтения/записи.

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

Для дополнения файла новыми данными надо установить текущую позицию на конец файла и выполнить операцию записи.

Текущая позиция представляется в программе переменной типа long.

Для работы с ней в станд. библиотеке имеются две функции:

long ftell(FILE *fp);

возвращает текущую позицию в файле. Если текущая позиция не определена, функция возвращает  -1L.

Вторая функция устанавливает текущую позицию в файле на байт с номером pos:

Соседние файлы в папке Лекции