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

Лабораторная работа №6

РАБОТА С ФАЙЛАМИ В ЯЗЫКЕ ПРОГРАММИРОВАНИЯ С++

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

  1. Краткие теоретические сведения. Работа с файлами с помощью библиотеки классов MFC (Microsoft Foundation Classes)

2.1. Класс cFile

Данный класс предназначен для обеспечения работы с файлами. Он позволяет упростить использование файлов, представляя файл как объект, который можно создать, читать, записывать и т.д. Чтобы получить доступ к файлу, сначала надо создать объект класса CFile. Далее этот файл можно открыть, вызвав методOpen(), в качестве параметров которого указывают путь к открываемому файлу и режим использования файла. Прототип методаOpen() имеет следующий вид:

virtual BOOL Open(LPCTSTR FileName, UINT Flags, CFileException* pError = NULL);

В качестве параметра FileName нужно указать имя открываемого файла. Можно указать только имя файла или полное имя файла, включающее полный путь к нему.

Второй параметр Flags определяет действие, выполняемое с файлом, а также атрибуты файла. Ниже представлены некоторые возможные значения параметра Flags:

СFile::modeCreate - Создается новый файл. Если указанный файл существует, то его содержимое стирается и длина файла устанавливается равной нулю.

CFile::modeRead - Файл открывается только для чтения.

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

CFile::modeWrite - Файл открывается только для записи.

Необязательный параметр pError, который является указателем на объект класса CFileException, используется только в том случае, если выполнение операции с файлом вызовет ошибку. При этом в объект, указываемый pError, будет записана дополнительная информация.

Метод Open() возвращает ненулевое значение, если файл открыт и нуль в случае ошибки. Ошибка при открытии файла может случиться, например, если методу Open() указан для чтения несуществующий файл.

Пример использования метода Open().

CFile file; // создали объект класса

char* FileName = "test.dat"; //определили имя открываемого файла

file.Open( FileName, CFile::modeCreate | CFile::modeWrite );

После завершения работы с файлом, его надо закрыть. Класс CFile имеет для этого специальный метод Close().

Пример использования метода Close().

file.Close( );

Для чтения из файла предназначен метод Read. Его прототип выглядит следующим образом:

virtual UINT Read( void* Buf, UINT nCount );

Параметры:

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

nCount – максимальное количество байт, которые будут считаны из файла.

Возвращаемое значение – количество байт, переданных в буфер, которое может быть меньше, чем nCount, если при чтении был достигнут конец файла.

Пример использования метода Read().

CFile file; //создали объект класса CFile

...// открытие файла и т.д.

char pbuf[100]; //создали буфер для получения данных из файла

UINT nBytesRead = file.Read( pbuf, 100 );

//считываем 100 байт из открытого файла в буфер

Для записи в файл предназначен метод Write. Его прототип выглядит следующим образом:

virtual void Write( const void* Buf, UINT nCount );

Параметры:

Buf– указатель на определенный пользователем буфер (область памяти), где размещены данные, которые необходимо записать в файл;

nCount– количество байт, которые необходимо записать в файл.

Пример использования метода Write.

CFile file; //создали объект класса CFile

...// открытие файла и т.д.

char pbuf[10] = “0123456789”;//определили буфер с данными

cfile.Write( pbuf, 10 ); // записываем 10 байт из буфера в файл

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

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

virtual LONG Seek( LONG len, UINT From );

Возвращаемое значение – если требуемая позиция достижима и находится в файле, то количество байт от начала файла до новой позиции указателя чтения-записи.

Параметры:

len –количество байт, на которое необходимо переместить указатель чтения-записи, может быть отрицательным для перемещения в сторону начала файла;

From– указатель на режим перемещения, может иметь одно из следующих значений:

  • CFile::begin– перемещение наlen байт относительно начала файла, может быть только положительным;

  • CFile::current– перемещение наlen байт относительно текущей позиции указателя чтения-записи, может быть положительным или отрицательным;

  • CFile::end– перемещение наlen байт относительно конца файла, может быть только отрицательным.

Пример использования метода Seek().

CFile file; //создали объект класса CFile

...// открытие файла и т.д.

LONG len = 1000;

file.Seek(len, CFile::begin );

Чтобы переместить указатель в начало или конец файла, наиболее удобно использовать специальные методы. Метод SeekToBegin() перемещает указатель в начало файла, а метод SeekToEnd() - в его конец. Примеры их использования:

file.SeekToBegin();

file.SeekToEnd();

В состав класса CFile также входят методы, позволяющие установить и изменить длину файла, - GetLength(), SetLength().

Методы определения характеристик открытого файла:

GetPathName() – метод возвращает объект класса CString, в котором содержится полный путь файла, включая имя диска, каталоги, имя файла и его расширение;

GetFileName() - возвращает объект класса CString, в котором находится имя файла с расширением;

GetFileTitle() – возвращает объект класса CString, в котором находится имя файла без расширения.