Функция Seekg() в C++

Funkcia Seekg V C



В программировании на C++ функция seekg() предоставляет помощь в потоках файлов. Он является членом библиотеки iostream, и вы найдете его в заголовке . Эта функция позволяет программистам манипулировать тем, где начинается следующая операция ввода, тем самым оптимизируя процесс работы с файлами. Метод seekg() позволяет перейти к определенному месту в файле, что бесценно, когда вам нужно прочитать или обработать данные, которые не организованы последовательно. Независимо от того, хотите ли вы прочитать файл с начала, середины или конца, функция seekg() обеспечивает гибкость, необходимую для таких задач. В этом руководстве мы углубимся в то, как функции searchg() в C++ обеспечивают извлечение данных из различных точек файла.

Синтаксис и параметры функции Seekg() в C++

Seekg() может быть реализован с помощью двух синтаксисов:

1. Синтаксис Streampos

транслировать & искать ( пост на стримпосе ) ;

Этот синтаксис принимает только один параметр — позицию, который представляет положение курсора в буфере потока. Он представляет собой значение «int» типаstreampos.







2. Синтаксис смещения и направления

транслировать & искать ( стримить часто , ios_base :: искать это грязь ) ;

Этот синтаксис принимает на вход два параметра: смещение и направление. Параметр «ofst» — это целое число типаstreamoff, которое указывает смещение в буфере потока. Параметр «грязь» ищет направление.



  • ios_base::beg: Смещение от самого начала буфера потока.
  • ios_base::cur: смещение от текущей позиции в буфере потока.
  • ios_base::end: смещение от последней части буфера потока.

Функция searchg() в C++ манипулирует указателем файла, позволяя программисту поместить его в определенное место внутри файла. Он возвращает модификацию объекта «istream» (*this) и соответствующим образом корректирует указатель файла.



Обработка ошибок и исключений в функции C++ Seekg()

Функция searchg() в C++ обеспечивает базовую гарантию обработки исключений, сохраняя корректность объекта в случае возникновения исключения. Она может генерировать исключения «сбоя», когда флагу состояния ошибки не хватает информации, и функция ответственно перехватывает и управляет этими исключениями, повторно выдавая их, если при последнем вызове был установлен плохой бит.





Более того, распространенная проблема с seekg() возникает, когда он достигает конца файла (EOF), в результате чего указатель остается неустановленным и вызывает ошибку. Метод Clear() используется для сброса указателя и устранения ошибок, связанных с EOF. Кроме того, seekg() может рисковать изменением объекта потока в многопоточной среде, что требует осторожности и реализации механизмов синхронизации для смягчения потенциальных изменений объекта «вне потока».

Пример 1: Основы Seekg()

В первом примере мы объясним основы функции searchg() в C++. Код программы на C++ приведен ниже. Сначала взгляните на него, а затем мы перейдем к объяснению каждого раздела кода.



#include

#include

использование пространства имен std ;

интервал основной ( интервал аргк , голец ** аргв ) {

fstream sgFile ( 'seekgFile.txt' , iOS :: в | iOS :: вне | iOS :: ствол ) ;

sgFile << 'функция поиска()' ;

sgFile. искать ( 8 , iOS :: очень прошу ) ;

голец sgArray [ 8 ] ;

sgFile. читать ( sgArray , 8 ) ;

sgArray [ 8 ] '=' 0 ;

расчет << sgArray << конец ;

sgFile. закрывать ( ) ;

}

Программа включает в себя два необходимых заголовочных файла — и — для обработки файлов и операций ввода/вывода соответственно. После этого «использование пространства имен std;» включен оператор, позволяющий использовать стандартные идентификаторы C++ без явного указания пространства имен. Наконец, начинается основная функция, которая является точкой входа в программу и принимает аргументы командной строки (argc и argv).

fstream sgFile('seekgFile.txt', ios::in | ios::out | ios::trunk); – Здесь создается «sgFile», объект класса «fstream», представляющий файловый поток. Файл с именем «seekgFile.txt» связан с файловым потоком. Файловый поток открывается для ввода (ios::in) и вывода (ios::out). Если файл существует, его содержимое усекается (ios::trunc).

sgFile << «функция Seekg()»; – Строка «функции Seekg()» записывается в файл с помощью оператора «<<».

sgFile.seekg(8, ios::beg); – Функция seekg() используется для установки указателя get на 8-ю позицию от начала (ios::beg) файла.

sgFile.read(sgArray, 8); – Функция «read» используется для чтения восьми символов из текущей позиции указателя get в «sgArray».

sgArray[8] = 0; – Null завершает массив символов, чтобы обеспечить правильную обработку строк.

cout << sgArray << endl; – Содержимое «sgArray» (8 символов, считанных из файла) отображается на консоли с помощью cout.

сгФайл.закрыть(); – Функция close() используется для закрытия файлового потока.

Ожидается, что результатом этой программы будет «функция». Давайте проверим это в следующем фрагменте вывода:

Код создает файловый поток, связанный с файлом «seekgFile.txt», записывает строку в файл, ищет 8-ю позицию с начала, считывает восемь символов и выводит прочитанное содержимое. Наконец, файловый поток закрывается.

Пример 2: Динамическая навигация

Рассмотрим сценарий, в котором вам необходимо динамически вычислять смещение seekg(). Давайте разберемся, как динамически вычислять смещение, с помощью примера кода.

#include

#include

использование пространства имен std ;

интервал основной ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

интервал компенсировать '=' 8 ;

sgFile. искать ( компенсировать , iOS :: помещать ) ;

голец буфер [ 8 ] ;

sgFile. читать ( буфер , 8 ) ;

расчет << 'Содержание: ' << буфер << конец ;

sgFile. закрывать ( ) ;

возвращаться 0 ;

}

Как видите, мы читаем содержимое из того же файла, который мы создали в предыдущем примере, «seekgFile.txt». Функция seekg() устанавливает указатель get в текущую позицию (ios::cur) в файле и перемещает его на вычисленное смещение (8 символов). Функция read() считывает восемь символов из текущей позиции указателя get в буфер.

Учитывая содержимое файла функции Seekg() и смещение в восемь символов, программа выведет подстроку, начинающуюся с 9-го символа файла. Следовательно, ожидаемым результатом программы является «функция». Подтвердим это в следующем выводе:

Этот пример демонстрирует гибкость searchg() за счет динамического расчета смещения.

Пример 3: Навигация с конца

В этом примере мы покажем, как читать данные в файле с конца файла. Здесь seekg() используется для перехода от конца файла. Отрицательное смещение указывает на позицию относительно конца. См. следующий код:

#include

#include

использование пространства имен std ;

интервал основной ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

sgFile. искать ( - 4 , iOS :: конец ) ;

голец буфер [ 8 ] ;

sgFile. читать ( буфер , 8 ) ;

расчет << 'Содержание: ' << буфер << конец ;

sgFile. закрывать ( ) ;

возвращаться 0 ;

}

Эта программа на C++ открывает файл с именем «seekgFile.txt», который перемещает указатель получения на четыре символа назад от конца файла с помощью sgFile.seekg(-4, ios::end), считывает следующие восемь символов из этой позиции в буфер, а затем выводит содержимое буфера на консоль. Учитывая содержимое файла как «функцию Seekg()», ожидаемый результат — «действие». Давайте сопоставим вывод на скриншоте со следующим выводом:

Заключение

Подводя итоги, seekg() становится ценным инструментом для точной навигации по файловым потокам. Благодаря своей способности искать произвольные позиции, динамически вычислять смещения и перемещаться из разных точек в файле, seekg() позволяет разработчикам эффективно обрабатывать файловые операции. Как мы видели в примерах, освоение функции searchg() повышает контроль и гибкость при работе с файловыми потоками в C++. Однако для обеспечения надежных и безошибочных операций с файлами в C++ требуется тщательное рассмотрение обработки исключений и потенциальных сценариев гонки данных.