Пример использования метода Seek()
Лабораторная работа №3
РАБОТА С ФАЙЛАМИ В ЯЗЫКЕ ПРОГРАММИРОВАНИЯ С++
1. Цель работы: изучить методы доступа к файлам в среде Microsoft Developer Studio (Visual C++).
2. Краткие теоретические сведения. Работа с файлами с помощью библиотеки классов 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, в котором находится имя файла без расширения.
Класс CStdioFile
Класс CStdioFile наследован от класса CFile. Для чтения и записи в текстовый файл класс CStdioFile включает два новых метода: ReadString() и WriteString(). Синтаксис записи этих операторов следующий:LPTSTR ReadString(LPTSTR str); void WriteString(LPCTSTR str); Первый метод позволяет прочитать из файла строку символов str, а второй метод – записать строку символов str в файл. Методы должны быть вызваны у объекта класса CStdioFile, с которым с помощью функции Open() должен быть связан конкретный физический файл. Пример записи в файл.
CString Text = "string\nstring\nstring";
CStdioFile File("data.txt",CFile::modeCreate|CFile::modeWrite);
File.WriteString(Text);
File.Close();
Пример чтения из файла.
CStdioFile File(DlgOpen.GetPathName(),CFile::modeRead);
if (File!=NULL)
{CString s;
for (int i=0;i<5;i++)
{File.ReadString(s);
m_str+=s;
m_str+=CString("\r\n");
}
UpdateData(0); // вывод данных из переменной m_str в EditBox
Дата добавления: 2018-04-05; просмотров: 459; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!