Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабор_работа №3.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
561.66 Кб
Скачать

Лабораторная работа №3 работа с файлами

1. Цель работы: изучить методы доступа к файлам в среде Microsoft Developer Studio (Visual C++).

  1. Краткие теоретические сведения.

2.1. Работа с файлами в C/C++.

Для работы с файлами используется структура FILE, функции которой перечислены ниже.

Прежде всего, в программе необходимо создать указатель на структуру FILE, в который будет помещен адрес открытого файла с помощью функции fopen():

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

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

Параметры функции: filename – имя открываемого файла; mode – режим открытия файла.

Режим

Описание

r

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

w

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

а

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

r+

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

W+

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

а+

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

Спецификация режима может быть дополнена символами t или b, указывающими, в текстовом или двоичном режиме от­крывается файл.

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

Ниже перечислены функции чтения и записи в файл данных.

int fputc(int character, FILE *stream);

Функция записывает один символв файл.

Параметры функции: character – записываемый символ; *stream – указатель на структуру типа FILE.

Возвращаемое значение: записанный в файл символ или EOF в случае ошибки.

int fputs(const char* string, FILE *stream);

Функция записывает символьную строку в файл. Перенос завершается при достижении символа конца строки '\0' в переменной string. Сам нуль-терминатор в файл не передается и не заменяется симво­лом '\n'.

Параметры функции: string – строка символов; *stream – указатель на структуру типа FILE.

Возвращаемое значение: код последнего записанного в файл символа. В случае ошибки возвращается EOF.

int fgetc(FILE* stream);

Функция считывает символ из файла stream. После считывания символа указатель записи-чтения файла устанавливается в новую пози­цию.

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

char* fgets(char string, int n, FILE* stream);

Функция считывает строку из файла stream до тех пор, пока не будут считаны n символов, либо символ конца строки '\n', либо не будет достигнут конец файла. Символ '\n' не передается в считанную строку. Функция автоматически дополняет полученную строку нуль-терминатором '\0'.

Возвращаемое значение: указатель на string, а в случае ошибки или при получении символа конца файла — NULL-указатель.

int fseek(FILE *stream, long offset, int from_where);

Функция передвигает указатель записи-чтения файла на заданное аргумен­том offset количество байтов. Аргумент from_where задает точку отсчета для сдвига. Для файлов, открытых в двоичном режиме, количество байтов смещения указателя соответствует числу символов, на которые должен передвинуться указатель записи-чтения файла (может быть также и отрицательным). Для файлов, открытых в текстовом режиме, количество байтов смещения должно вычисляться с помощью функции ftell(), причем аргумент from_where должен быть равен SEEK_SET. Для аргумента from_where могут быть заданы три различные константы:

  • SEEK_CUR – сдвиг выполняется от текущей позиции указателя чтения-записи файла;

  • SEEK_END – сдвиг выполняется от конца файла;

  • SEEK_SET – сдвиг выполняется от начала файла.

Возвращаемое значение: нуль в случае успеха, в противном случае — любое ненулевое значение.

Пример использования структуры FILE для записи в файл

#include <iostream.h>

#include <stdio.h>

void main()

{ FILE *file; //объявили указатель на структуру FILE

char* file_name = "file.txt"; //определили имя файла

char stroka[50] = "0123456789"; //определили строку для записи в файл

file = fopen( file_name, "w" ); //открыли файл на запись

fputs( stroka, file ); //поместили строку в файл

fputs( "\n", file); //записали в файл символ переноса строки

fputs( stroka, file); //еще раз поместили строку в файл

fclose( file ); //закрыли файл

}

Пример использования структуры FILE для чтения из файла

#include <iostream.h>

#include <stdio.h>

void main()

{ FILE *file; //объявили указатель на структуру FILE

char* file_name = "file.txt"; //определили имя файла

char stroka[50]; //определили строку для чтения символов из файла

file = fopen( file_name, "rb" ); //открыли файл на чтение в битовом режиме

if (file != NULL) // если указатель на структуру FILE не пустой

{fgets( stroka, 11, file ); //считываем из файла 10 символов, 11-ым символом

//будет в строку помещен символ конца строки

cout << "stroka = " << stroka<<endl; //выводим на экран переменную stroka

}

fclose(file); //закрыли файл

}

2.2. Работа с файлами с помощью MFC(класс CFile) и стандартный класс MFC CFileDialog (только С++).

В библиотеку MFC включено несколько классов для обеспечения работы с файлами.