Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Dop_Prog_файл.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
185.86 Кб
Скачать

8

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

3.1 Открытие и закрытие файлов

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

Открытие файла выполняет функция с прототипом:

FILE *fopen(const char *filename, const char *mode);

Эта функция возвращает указатель на структуру типа FILE (FILE*), описывающую открытый поток. Если поток не удалось открыть, функция возвращает NULL-указатель.

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

char mode ‑ указатель на строку, задающую режим открытия потока, может принимать следующие значения:

"r" – поток открывается только для чтения из существующего файла, "r+" – поток открывается для чтения из существующего и записи в существующий файл;

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

"a" – поток открывается для добавления данных в конец файла, "a+" – поток открывается для добавления данных в конец файла и для чтения из файла. Если файл не существует, он создается;

t – поток открывается в текстовом режиме, задается после r, w, a;

b – поток открывается в двоичном режиме, задается после r, w, a.

Закрытие файла выполняет функция функция с прототипом:

int fclose(FILE *fp);

Функция закрывает поток, на который указывает fp. При успешном закрытии потока функция возвращает 0, иначе – EOF(–1).

Для переоткрытия файла с другим режимом доступа существует функция со следующим прототипом:

FILE *freopen(const char *filename,const char*mode,FILE *fp);

Пример 3.1

#include<stdio.h>

int main()

{FILE *fp;

char buff[100],*fname ="myfile.txt";

fp=fopen(fname,"r");

if(fp==NULL) {puts("ERROR_1"); return -1;}

fgets(buff,50,fp);

puts(buff);

fp=freopen(fname,"a",fp);

if(fp==NULL) {puts("ERROR_2"); return -1;}

fputs("abcdef",fp);

fclose(fp);

return 0;}

Для анализа ошибок можно использовать функцию c прототипом:

Void perror(const char *str);

Эта функция выводит на экран строку str вместе с системной ошибкой. Список системных ошибок определен в файле <stdlib.h>.

Пример 3.2

#include<stdio.h>

int main()

{FILE *ptr fopen("abc.doc","r");

if(ptr==NULL){perror("Не могу открыть файл: ");return -1;}

char c=fgetc(ptr);

fclose(ptr);

return 0;}

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