파일에서 데이터를 불러오고, 파일에 데이터를 쓰는 것을 파일처리 라고 합니다.
파일처리에선 헤더파일을
<fstream>
을 사용합니다.
만약 파일처리를 하고 싶다면include<fstream>
을 선언해주어야 합니다.
ofstream은 출력 파일 스트림 입니다. 출력 파일을 생성하고 파일에 데이터를 쓸때 사용되는데, 더 자세한 건 이후에 보겠습니다.
ifstream 은 입력 파일 스트림 클래스입니다. 파일에서 데이터를 읽을 때 사용하는데, 자세한 건 이후에 설명하겠습니다.
우리가 int a 해주는 것처럼 ofstream 클래스 변수를 생성하고, 그 변수에 어떤 파일에 값을 출력할 것인지 정해준다.
선언방법 (두가지 방법 모두 가능)
1. ofstream 변수명{"파일명"};
2. ofstream 변수명;
변수명.read{"파일명"};
이후에 cout<<값 해주는 것처럼 변수명을 cout처럼 활용해서 값을 파일에 출력해준다. 이때는 \t, \n등은 값으로 받지 않는다.
선언방법
변수명<<값;
이외에도 값을 입력할 수 있는 방법은 있다.
대표적 예시로 put함수가 있다. put함수는 아래 코드를 참고.
하지만 이는 문자형으로 입력을 받기 떄문에 숫자를 입력하면 아스키 코드 값을 인식하여 그 값을 넣는 경우가 있다. 이처럼 사용하기 어색하기 때문에 위에 방법을 추천한다.
//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 os{ "numbers.txt" };
if (!os) {
cerr << "파일 오픈에 실패했습니다." << endl;
exit(1);
}
for (int i{ 0 }; i < 100; i++) {
int num = i + 1;
os.put(num);
os << " ";
}
이도 ofstream과 마찬가지로 ifstream 변수명 하면 된다. 선언 방법은 생략하겠다.
선언해준 후, cin>>변수 하는것 처럼 변수명>>값을 하면 그 값에 파일의 값이 하나 씩 입력된다. 값은 이스케이프 시퀸시 기준으로 입력 받아진다. 값이 받아지면 커서가 그 다음 값으로 이동하는 방식이다.
ex) 데이터1. 1 2 3 4 5
데이터 2.
1
2
3
4 5
위에 데이터 둘은 똑같이 읽힌다.
단, get함수를 쓰는 경우는 다르다. 이때는 \t, \n 등 이것도 입력받아지는 것이기 때문이다. 만약에 띄어쓰기나 탭 등을 포함하고 싶다면 get함수를 쓰는것이 좋다고 볼 수 있겠다.
//ifstream 변수 is 선언
ifstream is{ "numbers.txt" };
if (!is) {
cerr << "파일 오픈에 실패했습니다." << endl;
exit(1);
}
// number변수를 생성해서 그 값에 파일 값을 받겠다.
int number;
while (is) {
is >> number;
cout << number << " ";
}
ifstream is;
char c;
is.open("sample.txt");
if (!is) {
cerr << "파일 오픈에 실패했습니다." << endl;
exit(1);
}
while (is.get(c))
cout << c;
is.close();