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

Funkcia C Seekg



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

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

Seekg() може да се реализира с два синтаксиса:

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

поток и търси ( streampos пост ) ;

Този синтаксис приема само един параметър, позиция, която представлява позицията на курсора в буфера на потока. Той представлява стойност „int“ и е от тип streampos.







2. Синтаксис за отместване и посока

поток и търси ( предавам често , ios_base :: търсете е мръсотия ) ;

Този синтаксис приема два параметъра като вход: отместване и посока. Параметърът „ofst“ е цяло число от тип streamoff, което показва отместването в буфера на потока. Параметърът „мръсотия“ търси посока.



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

Функцията seekg() в C++ манипулира указателя на файла, позволявайки на програмиста да го позиционира на определено място във файла. Той връща модификацията на обекта „istream“ (*this) и съответно настройва указателя на файла.



Обработка на грешки и изключения във функцията C++ Seekg().

Функцията seekg() в C++ осигурява основната гаранция за обработка на изключения, като поддържа валидността на обекта, ако възникне изключение. Може да хвърли изключения за „неуспех“, когато флагът за състояние на грешка няма информация и функцията отговорно улавя и управлява тези изключения, като ги хвърля отново, ако в последното извикване е зададен лош бит.





Освен това често срещан проблем със seekg() възниква, когато достигне края на файла (EOF), което кара указателя да остане ненастроен и задейства грешка. Методът clear() се използва за нулиране на указателя и разрешаване на свързаните с EOF грешки, за да се реши това. Освен това, seekg() може да рискува да промени обект на поток в многонишкова среда, което налага повишено внимание и внедряване на механизми за синхронизиране за смекчаване на потенциалните промени на обекта „ofstream“.

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

В първия пример ще обясним основите на функцията seekg() в C++. Кодът на C++ програма е даден по-долу. Първо го разгледайте и след това ще преминем към обяснението на всеки раздел от кода.



#include

#include

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

вътр основен ( вътр argc , въглен ** argv ) {

fstream sgFile ( 'seekgFile.txt' , ios :: в | ios :: навън | ios :: багажник ) ;

sgFile << 'seekg() функция' ;

sgFile. търси ( 8 , ios :: помолвам ) ;

въглен sgArray [ 8 ] ;

sgFile. Прочети ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgFile. близо ( ) ;

}

Програмата включва два необходими заглавни файла – и – съответно за обработка на файлове и операции за вход/изход. След това „using namespace 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() function“ се записва във файла с помощта на оператора „<<“.

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

sgFile.read(sgArray, 8); – Функцията „четене“ се използва за четене на осем знака от текущата позиция на указателя за получаване в „sgArray“.

sgArray[8] = 0; – Null прекратява масива от знаци, за да осигури правилното обработване на низове.

cout << sgArray << endl; – Съдържанието на “sgArray” (8-те знака, прочетени от файла) се показва на конзолата с помощта на cout.

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

Резултатът от тази програма се очаква да бъде „функция“. Нека го проверим в следния изходен фрагмент:

Кодът създава файлов поток, който е свързан с файла „seekgFile.txt“, записва низ във файла, търси 8-та позиция от началото, чете осем знака и извежда прочетеното съдържание. Накрая файловият поток е затворен.

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

Помислете за сценарий, при който трябва да изчислите динамично отместването на seekg(). Нека разберем как динамично да изчислим отместването с помощта на примерен код.

#include

#include

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

вътр основен ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

вътр изместване = 8 ;

sgFile. търси ( изместване , ios :: слагам ) ;

въглен буфер [ 8 ] ;

sgFile. Прочети ( буфер , 8 ) ;

cout << „Съдържание:“ << буфер << endl ;

sgFile. близо ( ) ;

връщане 0 ;

}

Както можете да видите, ние четем съдържанието от същия файл, който създадохме в предишния пример, „seekgFile.txt“. Функцията seekg() задава указателя get на текущата позиция (ios::cur) във файла и се премества с изчисленото отместване (8 знака). Функцията read() чете осем знака от текущата позиция на указателя get в буфера.

Като се има предвид съдържанието на файла „seekg() function“ и отместването от осем знака, програмата ще изведе подниза, който започва от 9-ия знак на файла. Следователно очакваният резултат от програмата е „функция“. Нека го потвърдим в следния даден изход:

Този пример демонстрира гъвкавостта на seekg() чрез динамично изчисляване на отместването.

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

В този пример ще демонстрираме как да четем данните във файл от края на файла. Тук seekg() се използва за навигация от края на файла. Отрицателното отместване показва позиция, която е спрямо края. Вижте следния даден код:

#include

#include

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

вътр основен ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

sgFile. търси ( - 4 , ios :: край ) ;

въглен буфер [ 8 ] ;

sgFile. Прочети ( буфер , 8 ) ;

cout << „Съдържание:“ << буфер << endl ;

sgFile. близо ( ) ;

връщане 0 ;

}

Тази C++ програма отваря файл с име „seekgFile.txt“, който премества указателя за получаване на четири знака назад от края на файла с помощта на sgFile.seekg(-4, ios::end), чете следващите осем знака от тази позиция в буфер и след това отпечатва съдържанието на буфера на конзолата. Като се има предвид съдържанието на файла като „seekg() функция“, очакваният изход е „ction“. Нека съпоставим изхода в екранната снимка на следния изход:

Заключение

В обобщение, seekg() се очертава като ценен актив за прецизно навигиране във файловите потоци. Чрез способността си да търси произволни позиции, динамично да изчислява отместванията и да навигира от различни точки във файл, seekg() дава възможност на разработчиците да се справят ефективно с файловите операции. Както видяхме в примерите, овладяването на seekg() подобрява вашия контрол и гъвкавост при работа с файлови потоци в C++. Това обаче изисква внимателно разглеждане на обработката на изключения и потенциалните сценарии за надпревара на данни, за да се осигурят стабилни и безгрешни файлови операции в C++.