Синтаксис и параметри на функцията 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. близо ( ) ;
}
Програмата включва два необходими заглавни файла –
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++.