Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_Файлы.doc
Скачиваний:
25
Добавлен:
11.05.2015
Размер:
140.8 Кб
Скачать

File *fl;

fl = fopen("lab2.dat","w”);

Более грамотно бедут:

File *fl;

if ((fl = fopen("lab2.dat","w"))==NULL)

{

cout << "Oshibka pri sozdanii"<<endl;

Return 1;

}

Такой алгоритм позволяет обнаружить любую ошибку, возникающею при создании файла.

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

File *fl;

if ((fl = fopen("lab2.dat","r"))==NULL)

{

fl = fopen("lab2.dat","w");

}

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

Разница между режимами r+ и w+ состоит в том, что если файл не существует, то в режиме открытия r+ он создан не будет, а в режиме w+ будет создан! Если файл уже существует, то открытие его в режиме w+ приведет к утрате его содержимого, а в режиме r+ оно останется нетронутым.

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

Для закрытия файла используется функция fclose(). Прототип функции:

Int fclose(file *указатель_на _файл);

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

Возвращение нуля означает успешную операцию закрытия. В случае же ошибки возвращается EOF. Чтобы точно узнать, в чем причина этой ошибки, можно использовать стандартную функцию ferror().

Для закрытия нескольких файлов введена функция:

int fcloseall(void);

Функция закрывает все открытые файлы. Возвращает количество закрытых файлов или EOF, если возникает ошибка. В MVC++ 2005 функция пишется:_fcloseall.

14.2.1. Функции для модификации содержимого файла

Функция

int putc(int символ, FILE * указатель_на _файл);

записывает один символ в текущую позицию указанного открытого файла. Хотя символ и определяется как int, однако записывается только младший байт (соответствующийchar). Если функция выполнилась успешно, то возвращается записанный символ, иначе – EOF.

Функция

int getc(FILE * указатель_на _файл);

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

Пример: Открыть файл и записывать туда вводимые с клавиатуры символы, до тех пор, пока не будет введен символ ‘!’. Прочитать полученный файл.

#include <iostream.h>

#include <stdio.h>

#include <stdlib.h>

FILE *fl;

void flr();

void flw();

int main()

{

flr(); // Запись в файл

flw(); // Чтение из файла

return 0;

}

void flr()

{

if ((fl = fopen("lab2.dat","w"))==NULL)

{

cout << "Oshibka pri sozdanii"<<endl;

exit(1);

}

char ch;

do {

cin >> ch;

putc(ch, fl);

} while (ch != '!');

fclose(fl);

}

void flw()

{

if ((fl = fopen("lab2.dat","r"))==NULL)

{

cout << "Oshibka pri otritii"<<endl;

exit(1);

}

char ch= getc(fl);

while (ch != EOF)

{

cout << ch << " ";

ch=getc(fl);

}

fclose(fl);

}

Функция

int feof(FILE *указатель_на_файл);

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

Функция flwв предыдущем примере может выглядеть так:

void flw()

{

if ((fl = fopen("lab2.dat","r"))==NULL)

{

cout << "Oshibka pri otritii"<<endl;

exit(1);

}

while(!feof(fl)) cout << getc(fl) << " ";

fclose(fl);

}

Функция

int fputs(const char * строка, FILE * указатель_на _файл);

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

Функция

char *fgets(char *строка, intдлина,

FILE * указатель_на _файл);

читает строку символов из текущей позиции указанного открытого файла до тех пор, пока не будет прочитан символ перехода на новую строку, или количество прочитанных символов не станет равным длина-1. Если был прочитан разделитель строк, он записывается в строку. Полученная в результате строка будет оканчиваться символом конца строки ('\0'). В случае ошибки функция возвращаетNULL

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

#include <iostream.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

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