C++ 파일처리

Joosi_Cool·2022년 11월 2일
2

C++

목록 보기
19/20
post-thumbnail

파일처리란?

파일에서 데이터를 불러오고, 파일에 데이터를 쓰는 것을 파일처리 라고 합니다.

파일처리에서 알아야 하는것!

1. 헤더파일

파일처리에선 헤더파일을 <fstream>을 사용합니다.
만약 파일처리를 하고 싶다면 include<fstream>을 선언해주어야 합니다.

2. ofstream

ofstream은 출력 파일 스트림 입니다. 출력 파일을 생성하고 파일에 데이터를 쓸때 사용되는데, 더 자세한 건 이후에 보겠습니다.

3. ifstream

ifstream 은 입력 파일 스트림 클래스입니다. 파일에서 데이터를 읽을 때 사용하는데, 자세한 건 이후에 설명하겠습니다.


ofstream 사용법

우리가 int a 해주는 것처럼 ofstream 클래스 변수를 생성하고, 그 변수에 어떤 파일에 값을 출력할 것인지 정해준다.

선언방법 (두가지 방법 모두 가능)
1. ofstream 변수명{"파일명"};
2. ofstream 변수명;
변수명.read{"파일명"};

이후에 cout<<값 해주는 것처럼 변수명을 cout처럼 활용해서 값을 파일에 출력해준다. 이때는 \t, \n등은 값으로 받지 않는다.

선언방법
변수명<<값;

이외에도 값을 입력할 수 있는 방법은 있다.
대표적 예시로 put함수가 있다. put함수는 아래 코드를 참고.
하지만 이는 문자형으로 입력을 받기 떄문에 숫자를 입력하면 아스키 코드 값을 인식하여 그 값을 넣는 경우가 있다. 이처럼 사용하기 어색하기 때문에 위에 방법을 추천한다.

ofstream 예시코드

	//ofstream 클래스 변수 os를 선언
	ofstream os{ "numbers.txt" };
    //위에 방법 대신 아래도 가능
    //ofstream os;
    //os.read("numbers.txt");
    
	if (!os) {
		cerr << "파일 오픈에 실패했습니다." << endl;
		exit(1);
	}

	for (int i{ 0 }; i < 100; i++) {
     	//os<<값; 은 cout과 같은 역할을 하며 파일에
        //입력하는 역할을 한다.
		os << i << " ";
	}
    
    // 출력하기 위해 open한 파일을 닫는다.
    os.close();

ofstream( put함수 ) 예시코드

	ofstream os{ "numbers.txt" };
	if (!os) {
		cerr << "파일 오픈에 실패했습니다." << endl;
		exit(1);
	}

	for (int i{ 0 }; i < 100; i++) {
		int num = i + 1;
		os.put(num);
		os << " ";
	}

ifstream 사용법

이도 ofstream과 마찬가지로 ifstream 변수명 하면 된다. 선언 방법은 생략하겠다.

선언해준 후, cin>>변수 하는것 처럼 변수명>>값을 하면 그 값에 파일의 값이 하나 씩 입력된다. 값은 이스케이프 시퀸시 기준으로 입력 받아진다. 값이 받아지면 커서가 그 다음 값으로 이동하는 방식이다.
ex) 데이터1. 1 2 3 4 5
데이터 2.
1
2
3
4 5
위에 데이터 둘은 똑같이 읽힌다.

단, get함수를 쓰는 경우는 다르다. 이때는 \t, \n 등 이것도 입력받아지는 것이기 때문이다. 만약에 띄어쓰기나 탭 등을 포함하고 싶다면 get함수를 쓰는것이 좋다고 볼 수 있겠다.

ifstream 예시코드

//ifstream 변수 is 선언
ifstream is{ "numbers.txt" };
	if (!is) {
		cerr << "파일 오픈에 실패했습니다." << endl;
		exit(1);
	}
    // number변수를 생성해서 그 값에 파일 값을 받겠다.
	int number;
	while (is) {
		is >> number;
		cout << number << " ";
	}
    
    

istream(get함수) 예시코드

	ifstream is;
	char c;
	is.open("sample.txt");

	if (!is) {
		cerr << "파일 오픈에 실패했습니다." << endl;
		exit(1);
	}
	
	while (is.get(c))
		cout << c;
	is.close();
profile
집돌이 FE개발자의 노트

0개의 댓글