2013-07-09 3 views
0

fin.getline()을 여러 번 호출하여 파일에서 읽을 함수 func1 (ifstream & fin)이 있습니다. 이제이 func1 내부에서 func1이 액세스하는 동일한 파일에 액세스해야하는 다른 함수 func2 (ifstream &)를 호출합니다. 간단히 func2를 func2 (fin)라고 부를 수 있습니다.C++ ifstream 객체 "reseting"

이제 func1이 파일을 4 행까지 읽은 다음 func2가 호출되어 7 행까지 파일을 읽는다고 가정 해 봅시다. 이제 문제가 있습니다. funct2가 func1로 돌아 오자 마자 func1이 끝난 곳, 즉 5 번 줄에서 파일을 계속 읽지 만, fin이 파일의 8 번 줄을 "가리키고"있기 때문에 불가능합니다.

func2 (const ifstream &) 및 func2 (const ifstream *)로 func2를 정의하거나 func1 내부에서 fin 복사본을 작성하여 func2에 전달하려고했으나 컴파일러에서 이러한 옵션을 허용하지 않습니다.

어떻게해야합니까? 감사.

+1

당신의 자리를 저장하고 후에 찾을 수 있습니다. – chris

+0

스트림 멤버 함수'tellg'와'seekg'를 찾는다. 파일 열기 모드는 탐색을 허용해야합니다 (즉, 순차적 읽기로 플래그 지정되지 않음) – paddy

답변

2

일반적으로 "돌아 가기"를 원하면 fstream::tellg()을 사용하여 현재 위치를 알려주고 그 후에는 fstream::seekg()으로 돌아갑니다.

일반적으로 선호하는 다른 옵션은 선을 한 번만 읽고 캐시/선 저장으로 원하는 영역을 앞뒤로 이동할 수있는 충분한 선을 유지하는 것입니다. 파일이 절대적으로 엄청난 것이 아니라고 가정하면 벡터의 모든 라인을 유지하면 꽤 잘 작동합니다. 파일이 수 기가 바이트 인 경우 옵션이 아닐 수 있습니다 (임베디드 장치의 경우 몇 메가 바이트라도 모두 저장할 수 있습니다).이 경우 더 이상 필요하지 않은 "discrding"방법을 사용해야합니다 .