C++ Chapter 18.7 : 파일의 임의 위치 접근하기

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


chapter 18. 입력과 출력

파일의 임의 위치 접근하기

🔔 seekgs(int n)

파일 내부의 위치를 n번째 글자 (n byte) 로 옮겨놓는다.

image

image

  • ifs.tellg(): 파일 내부의 현재 위치를 알려 줌.
  • ifstream ifs ("file.txt")
    • ifs.seekg(5) : 디폴트 → 처음을 기준으로 5번째 위치
    • ifs.seekg(5, ios::cur ) : 현재 위치를 기준으로 5번째 위치
    • ifs.seekg(-5, ios::end ) : 끝 위치를 기준으로 끝에서 5번째 위치
  • getline(ifs, str) 하면 ifs로부터 엔터 포하 한 줄씩 읽어들여와 str에 저장
  • 현재 file.txt 에 abcdefghijklmnopqrstuvwxyz 가 저장되어 있다고 가정.
    • 사진 참고 !!!
      • 5번째 f 출력
      • 현재위치 5. 여기서 5번째니까 총 10번째 l 출력
      • ifs.seekg(0, ios::end); : 마지막 위치로부터 0번쨰니까 전체 28번째
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <cstdlib>		// for exit();
using namespace std;

int main()
{
	const string filename = "file.txt";

	// Make a file 
	if (true)
	{
		ofstream ofs(filename);
		if (!ofs) { std::cerr << "Making file error\n"; exit(EXIT_FAILURE);  }

		for (char i = 'a'; i <= 'z'; ++i)  // a ~ z 를 file.txt에 써 저장.
			ofs << i ;
		ofs << '\n';
	}
	// Read the file
	if (true)
	{
		ifstream ifs(filename);
		if (!ifs) { std::cerr << "Opening file error\n"; exit(EXIT_FAILURE);  }

		ifs.seekg(5);						// ifs.seekg(5, ios::beg); 처음부터 5바이트 떨어진 곳에서 시작.
		cout << (char)ifs.get() << '\n';	// 한 글자를 읽어온다. 문자열이면 getline()

		ifs.seekg(5, ios::cur);				// 현재 위치로부터 5바이트 떨어진 곳에서 시작.
		cout << (char)ifs.get() << '\n';	// 한 글자를 읽어온다.

		ifs.seekg(0, ios::end);				// 마지막 위치로부터 0바이트 떨어진 곳에서 시작.
		cout << ifs.tellg() << '\n';		// tellg() - 현재 위치를 알려준다.
	}
}


🔔 파일을 한번 열어서 읽기도 하고 쓰기도 하는 방법

  • fstream ifs;
    • ofstream 이랑 ifstream 합쳐진 형태
  • ifs.get() : 한 문자씩 파일에서 꺼내오기 (공백도 꺼내옴)
  • ifs.put() : 한 문자씩 파일에 덮어 쓰기
  • 파일을 열어 보면 5번째 문자 자리에 ‘A’가 덮어씌워진 것을 볼 수 있다.
	if(true)
	{
		fstream iofs(filename);
		for (char i = 'a'; i <= 'o'; ++i)
			iofs.put(i);
		iofs << '\n';

		iofs.seekg(5);
		cout << (char)iofs.get() << '\n';	// read;

		iofs.seekg(5);
		iofs.put('!');						// write;
	}


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기