Пример использования метода 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!