Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб_10С++.doc
Скачиваний:
276
Добавлен:
18.03.2015
Размер:
109.06 Кб
Скачать

1) Объявление файла

FILE *идентификатор;

Пример

FILE *f;

2) Открытие файла:

Функция открытия файла называется fopen(). Она возвращает указатель на объект стандартного (определенного в данной библиотеке) типа FILE. Параметров у функции fopen() два. Первый – это путь к файлу (строка), второй – параметры открытия файла.

fopen(имя физического файла, режим доступа)

Режим доступа — строка, указывающая режим открытия файла и тип файла

Типы файла: бинарный (b); текстовый (t)

Допустим, мы хотим создать в текущем каталоге проекта новый текстовый файл и записать в него два числа и строку. Пусть этот файл будет называться test.txt. Параметр открытия файла на запись в текстовом виде записывается строкой "wt". Буква w означает write (писать), буква t – text (текст). Если такой файл в каталоге существует, он перезаписывается (все старое содержимое в нем уничтожается), если он не существует, то создается исходно пустым.

Тогда команда открытия (создания пустого) файла запишется так:

   FILE * fo; 

  fo = fopen("test.txt","wt"); 

Можно задать и полный путь к файлу, например:

   fo = fopen("c:\\tmp\\test.txt","wt"); 

Не забываем, что одиночный символ \ внутри строки С++ задается двумя наклонными слэшами \\. Это частая ошибка.

После открытия файла в файловую переменную fo занесется некоторое число. Если таким числом будет ноль, считается, что файл открыть не удалось. В С++ нередки записи вида

  if( (fo=fopen("c:\\tmp\\test.txt","wt")) == 0 ) {

    // ошибка! 

   } 

где одновременно открывается файл и проверяется, успешно ли это сделано.

В таблице 1 приведены различные режимы открытия файла.

Таблица 1.

Режимы открытия файла

Значение

Описание

r

Файл открывается только для чтения

w

Файл открывается только для записи. Если соответствующий физический файл существует, он будет перезаписан

a

Файл открывается для записи в конец (для дозаписи) или создается, если не существует

r+

Файл открывается для чтения и записи.

w+

Файл открывается для записи и чтения. Если соответствующий физический файл существует, он будет перезаписан

a+

Файл открывается для записи в конец (для дозаписи) или создается, если не существует

Например:

f = fopen(s, "wb");

k = fopen("h:\ex.dat", "rb");

1.3 Неформатированный файловый ввод-вывод

1) Запись в файл

fwrite(адрес записываемой величины, размер одного экземпляра, количество записываемых величин, имя логического файла);

Например,

fwrite(&dat, sizeof(int), 1, f);

2) Чтение из файла

fread(адрес величины, размер одного экземпляра, количество считываемых величин, имя логического файла);

Например,

fread(&dat, sizeof(int), 1, f);

3) Закрытие файла

fclose(имя логического файла);

Пример 1. Заполнить файл некоторым количеством целых случайных чисел.

#include <cstdlib>

#include <iostream>

#include <conio.h>

int main() {

FILE *f;

int dat;

int n=rand()%30 + 1;

cout << "File name? ";

char s[20];

cin.getline(s, 20);

f=fopen(s, "wb");

for (int i=1; i<=n; i++) {

dat = rand()%101 - 50;

cout << dat << " ";

fwrite(&dat, sizeof(int), 1, f);

}

cout << “\n”;

fclose(f);

getch();

}

Пример 2. Поместить в файл n записей, содержащих сведения о кроликах, содержащихся в хозяйстве: пол (m/w), возраст (в мес.), масса.

#include <cstdlib>

#include <iostream>

#include <conio.h>

struct krolik {

char pol;

int vozrast;

double massa;};

int main() {

FILE *f;

krolik dat;

int n;

cout << "File name? ";

char s[20];

cin.getline(s, 20);

f=fopen(s, "wb");

cout << "How many rabbits? "; cin >> n;

for (int i=1; i<=n; i++) {

cout << "What sex " << i << "th rabbit? "; cin >> dat.pol;

cout << "How old " << i << "th rabbit? "; cin >> dat.vozrast;

cout << "What is the mass of the " << i << "th rabbit? "; cin >> dat.massa;

fwrite(&dat, sizeof(krolik), 1, f);

}

fclose(f);

getch();

}

Пример 3 (продолжение). В бинарном файле хранятся сведения о кроликах, содержащихся в хозяйстве: пол (m/w), возраст (в мес.), масса. Найти наиболее старого кролика. Если таких несколько, то вывести информацию о том из них, масса которого больше.

#include <cstdlib>

#include <iostream>

#include <conio.h>

struct krolik {

char pol;

int vozrast;

double massa;};

int main() {

FILE *f;

krolik dat, max;

int n;

cout << "File name? ";

char s[20];

cin.getline(s, 20);

f=fopen(s, "rb");

fread(&dat, sizeof(krolik), 1, f);

max=dat;

while (fread(&dat, sizeof(krolik), 1, f))

{if (dat.vozrast>max.vozrast) max=dat;

else if (dat.vozrast==max.vozrast&&dat.massa>max.massa) max=dat;}

cout << "The oldest rabbit has a sex " << max.pol << ", age " << max.vozrast << " and mass " << max.massa << endl;

getch();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]