Лабораторная работа №6
РАБОТА С ФАЙЛАМИ В ЯЗЫКЕ ПРОГРАММИРОВАНИЯ С++
1. Цель работы:изучить методы доступа к файлам в средеMicrosoftDeveloperStudio(VisualC++).
Краткие теоретические сведения. Работа с файлами с помощью библиотеки классов 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, в котором находится имя файла без расширения.