이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;)
이번 포스팅에서는 윈도우에서 CMD로 불리는 콘솔 창이 아닌, 파일을 통해 입출력을 주고받는 방법을 알아보겠습니다.
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <sstream>
using namespace std;
int main()
{
if (true)
{
ofstream ofs("my_first_file.dat"); // output file stream
if (!ofs)
{
cerr << "Couldn't open file " << endl;
exit(1);
}
ofs << "Line 1" << endl;
ofs << "Line 2" << endl;
}
}
여러 헤더파일을 추가했는데, 눈여겨보셔야 할 헤더 중 하나는 <fstream>입니다. fstream은 file stream의 약자로 파일 입출력을 관리해주는 헤더 파일입니다.
main 함수에서는 ofstream 타입의 변수 ofs를 선언하고 있습니다. ofstream은 output file stream의 약자입니다. 파일의 출력을 관리하는 타입인데, 변수의 값으로 주어지는 파일에 stream을 통해 입력을 하거나 해당 파일이 존재하지 않는다면 파일을 main 파일이 존재하는 디렉터리에 주어진 이름의 파일을 생성합니다.
if문에서는 ofs가 가지고 있는 이름의 파일을 불러오지 못할 때 출력할 에러 메시지를 정하고 있습니다. 해당 디렉토리에 ofs가 가지고 있는 이름의 파일이 존재하지 않는 경우 등이 존재합니다.
if문이 끝난 뒤에는 stream을 통해 "Line 1"과 "Line 2"라는 메시지를 ofs에 흘려보내고 있습니다. 즉, ofs에 저 메시지들을 저장합니다.
이 파일을 실행시켜보고 main 파일이 존재하는 디렉터리를 확인해보면
ofs가 가지고 있는 이름의 파일이 만들어진 것을 확인할 수 있습니다.
ofstream ofs("my_first_file.dat", ios::app); // append 모드
그리고 ofstream을 통해 파일에 값을 저장할 때, 첫 번째 매개변수로 파일의 이름을 준 뒤 두 번째 매개변수로 ios::app를 줌으로써 파일을 수정할 수 있습니다. 이렇게 ofs를 append 모드로 바꾼 뒤 프로그램을 실행시키고 my_first_file.dat 파일을 notepad를 통해 열어보면
위와 같이 같은 문자열이 두 번 저장된 걸 확인할 수 있습니다.
이번에는 존재하는 파일을 읽는 방법입니다.
int main()
{
if (true)
{
ifstream ifs("my_first_file.dat");
if (!ifs)
{
cerr << "Cannot open file" << endl;
exit(1);
}
while (ifs)
{
std::string str;
getline(ifs, str);
std:cout << str << endl;
}
}
}
이번에 사용할 타입은 ifstream입니다. 눈치채셨겠지만 input file stream의 약자입니다. 위에서 ofstream의 사용방법과 비슷하게, ifs가 가지고 있는 파일을 열지 못할 경우에 발생할 에러 창을 if문을 통해 설정합니다.
그리고 이번엔 while문에서 string 자료형 변수 str을 만들고, getline 함수를 통해 ifs가 가리키는 파일에서 한 줄 한 줄씩 string 변수 str에 저장해서 cout을 통해 str을 출력합니다.
그리고 프로그램을 실행시켜보면 위에서 ofs를 통해 저장한 문자열들이 그대로 출력되는 걸 볼 수 있습니다.
'Information Technology > C++' 카테고리의 다른 글
[C++] 람다 함수와 std::function (0) | 2019.12.28 |
---|---|
[C++] 파일의 임의 위치 접근하기 (0) | 2019.12.28 |
[C++] 정규 표현식 (0) | 2019.12.27 |
[C++] 문자열 스트림 (0) | 2019.12.26 |
[C++] ostream으로 출력하기 (0) | 2019.12.24 |