C++ Seekg() 함수

C Seekg Hamsu



C++ 프로그래밍에서 seekg() 함수는 파일 스트림 내에서 도움말을 제공합니다. iostream 라이브러리의 멤버이며 헤더에서 찾을 수 있습니다. 이 기능을 사용하면 프로그래머는 다음 입력 작업이 시작되는 위치를 조작할 수 있으므로 파일 작업 프로세스가 간소화됩니다. seekg() 메서드를 사용하면 파일의 특정 위치로 이동할 수 있으며 이는 순차적으로 구성되지 않은 데이터를 읽거나 처리해야 할 때 매우 유용합니다. 파일의 처음, 중간 또는 끝부터 읽는 것을 목표로 하든 seekg()는 이러한 작업에 필요한 유연성을 제공합니다. 이 가이드 전반에 걸쳐 C++의 seekg() 함수를 사용하여 파일 내의 다양한 지점에서 데이터 검색을 활성화하는 방법을 살펴보겠습니다.

C++의 Seekg() 함수 구문 및 매개변수

Seekg()는 두 가지 구문으로 구현할 수 있습니다.

1. Streampos 구문

개울 & 추구하다 ( 스트림 포스 포스트 ) ;

이 구문은 스트림 버퍼에서 커서 위치를 나타내는 하나의 매개변수인 position만 사용합니다. 'int' 값을 나타내며 streampos 유형을 나타냅니다.







2. 오프셋 및 방향 구문

개울 & 추구하다 ( 자주 스트리밍을 꺼요 , ios_base :: 추구는 ) ;

이 구문은 오프셋과 방향이라는 두 가지 매개변수를 입력으로 사용합니다. 'ofst' 매개변수는 스트림 버퍼의 오프셋을 나타내는 streamoff 유형의 정수입니다. 'dirt' 매개변수는 방향을 찾습니다.



  • ios_base::beg: 스트림 버퍼의 시작 부분부터 오프셋입니다.
  • ios_base::cur: 스트림 버퍼의 현재 위치에서 오프셋됩니다.
  • ios_base::end: 스트림 버퍼의 마지막 오프셋으로부터의 오프셋입니다.

C++의 seekg() 함수는 파일 포인터를 조작하여 프로그래머가 파일 내의 특정 위치에 포인터를 배치할 수 있도록 합니다. 'istream' 객체(*this)의 수정 사항을 반환하고 이에 따라 파일 포인터를 조정합니다.



C++ Seekg() 함수의 오류 및 예외 처리

C++의 seekg() 함수는 예외 처리에 대한 기본 보장을 보장하여 예외가 발생하는 경우 개체 유효성을 유지합니다. 오류 상태 플래그에 정보가 부족하면 '실패' 예외가 발생할 수 있으며, 함수는 이러한 예외를 책임감 있게 포착 및 관리하여 마지막 호출에서 잘못된 비트가 설정된 경우 해당 예외를 다시 발생시킵니다.





또한 seekg()의 일반적인 문제는 파일 끝(EOF)에 도달할 때 발생하여 포인터가 설정되지 않은 상태로 유지되고 오류가 발생합니다. Clear() 메서드는 포인터를 재설정하고 EOF 관련 오류를 해결하여 이 문제를 해결하는 데 사용됩니다. 또한 seekg()는 다중 스레드 환경에서 스트림 객체를 변경할 위험이 있으므로 주의가 필요하며 잠재적인 'ofstream' 객체 변경을 완화하기 위한 동기화 메커니즘의 구현이 필요합니다.

예제 1: Seekg()의 기본

첫 번째 예에서는 C++의 seekg() 함수의 기본 사항을 설명합니다. C++ 프로그램의 코드는 다음과 같습니다. 먼저 살펴보고 코드의 각 섹션에 대한 설명으로 넘어갑니다.



#include

#include

네임스페이스 표준 사용 ;

정수 기본 ( 정수 argc , ** argv ) {

fstream sg파일 ( 'seekgFile.txt' , iOS :: ~에 | iOS :: 밖으로 | iOS :: 트렁크 ) ;

sg파일 << 'seekg() 함수' ;

sg파일. 추구하다 ( 8 , iOS :: 빌다 ) ;

sgArray [ 8 ] ;

sg파일. 읽다 ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

시합 << sgArray << ;

sg파일. 닫다 ( ) ;

}

이 프로그램에는 파일 처리 및 입력/출력 작업에 각각 필요한 두 개의 헤더 파일인 이 포함되어 있습니다. 이후에는 'using 네임스페이스 std;' 문이 포함되어 네임스페이스를 명시적으로 지정하지 않고도 표준 C++ 식별자를 허용합니다. 마지막으로, 명령줄 인수(argc 및 argv)를 사용하여 프로그램의 진입점인 main 함수가 시작됩니다.

fstream sgFile(“seekgFile.txt”, ios::in | ios::out | ios::trunk); – 여기서는 파일 스트림을 나타내는 'fstream' 클래스의 객체인 'sgFile'이 생성됩니다. 'seekgFile.txt'라는 파일이 파일 스트림과 연결되어 있습니다. 파일 스트림은 입력(ios::in) 출력(ios::out)을 위해 열립니다. 파일이 존재하는 경우 해당 내용이 잘립니다(ios::trunc).

sgFile << “seekg() 함수”; – “<<” 연산자를 사용하여 “seekg() 함수” 문자열이 파일에 기록됩니다.

sgFile.seekg(8, ios::beg); – seekg() 함수는 파일의 시작(ios::beg)에서 8번째 위치에 get 포인터를 설정하는 데 사용됩니다.

sgFile.read(sgArray, 8); – 'read' 함수는 get 포인터의 현재 위치에서 'sgArray'로 8개의 문자를 읽는 데 사용됩니다.

sgArray[8] = 0; – Null은 적절한 문자열 처리를 보장하기 위해 문자 배열을 종료합니다.

cout << sgArray << endl; – 'sgArray'(파일에서 읽은 8자)의 내용은 cout을 사용하여 콘솔에 표시됩니다.

sgFile.close(); – close() 함수는 파일 스트림을 닫는 데 사용됩니다.

이 프로그램의 출력은 '함수'일 것으로 예상됩니다. 다음 출력 조각에서 확인해 보겠습니다.

코드는 'seekgFile.txt' 파일과 연관된 파일 스트림을 생성하고 파일에 문자열을 쓰고 처음부터 8번째 위치를 찾아 8자를 읽고 읽은 내용을 출력합니다. 마지막으로 파일 스트림이 닫힙니다.

예 2: 동적 탐색

seekg() 오프셋을 동적으로 계산해야 하는 시나리오를 생각해 보세요. 코드 예제를 통해 오프셋을 동적으로 계산하는 방법을 이해해 보겠습니다.

#include

#include

네임스페이스 표준 사용 ;

정수 기본 ( ) {

ifstream sg파일 ( 'seekgFile.txt' ) ;

정수 오프셋 = 8 ;

sg파일. 추구하다 ( 오프셋 , iOS :: 놓다 ) ;

완충기 [ 8 ] ;

sg파일. 읽다 ( 완충기 , 8 ) ;

시합 << '콘텐츠: ' << 완충기 << ;

sg파일. 닫다 ( ) ;

반품 0 ;

}

보시다시피, 이전 예제에서 만든 'seekgFile.txt'와 동일한 파일에서 콘텐츠를 읽고 있습니다. seekg() 함수는 파일 내 현재 위치(ios::cur)에 get 포인터를 설정하고, 계산된 오프셋(8자)만큼 이동합니다. read() 함수는 get 포인터의 현재 위치부터 8개의 문자를 버퍼로 읽어옵니다.

“seekg() 함수” 파일의 내용과 8자의 오프셋이 주어지면 프로그램은 파일의 9번째 문자부터 시작하는 하위 문자열을 출력합니다. 따라서 프로그램의 예상 결과는 '함수'입니다. 다음 출력에서 ​​이를 확인해 보겠습니다.

이 예는 오프셋을 동적으로 계산하여 seekg()의 유연성을 보여줍니다.

예 3: 끝에서 탐색

이 예에서는 파일 끝에서 파일의 데이터를 읽는 방법을 보여줍니다. 여기서는 파일 끝부터 탐색하는 데 seekg()를 사용합니다. 음수 오프셋은 끝을 기준으로 한 위치를 나타냅니다. 다음 주어진 코드를 참조하십시오:

#include

#include

네임스페이스 표준 사용 ;

정수 기본 ( ) {

ifstream sg파일 ( 'seekgFile.txt' ) ;

sg파일. 추구하다 ( - 4 , iOS :: ) ;

완충기 [ 8 ] ;

sg파일. 읽다 ( 완충기 , 8 ) ;

시합 << '콘텐츠: ' << 완충기 << ;

sg파일. 닫다 ( ) ;

반품 0 ;

}

이 C++ 프로그램은 sgFile.seekg(-4, ios::end)를 사용하여 파일 끝에서 4문자의 get 포인터를 뒤로 이동하고 해당 위치에서 다음 8문자를 읽어들이는 'seekgFile.txt'라는 파일을 엽니다. 버퍼를 생성한 다음 버퍼의 내용을 콘솔에 인쇄합니다. 파일 내용이 'seekg() function'인 경우 예상되는 출력은 'ction'입니다. 다음 출력의 스크린샷에 있는 출력을 일치시켜 보겠습니다.

결론

요약하면, seekg()는 파일 스트림을 정밀하게 탐색하는 데 유용한 자산으로 떠오릅니다. 임의의 위치를 ​​찾고, 오프셋을 동적으로 계산하고, 파일 내의 다른 지점에서 탐색하는 기능을 통해 seekg()는 개발자가 파일 작업을 효율적으로 처리할 수 있도록 지원합니다. 예제에서 본 것처럼 seekg()를 마스터하면 C++에서 파일 스트림 작업을 할 때 제어력과 유연성이 향상됩니다. 그러나 C++에서 강력하고 오류 없는 파일 작업을 보장하려면 예외 처리 및 잠재적인 데이터 경합 시나리오를 신중하게 고려해야 합니다.