헤더 라이브러리, fstream
파일을 읽기 위한 ifsteam과 파일을 쓰기 위한 ofstream을 사용하고 싶다면,
#include <fstream>을 추가해줘야 합니다.
파일 읽기, ifstream
ifstream은 input file stream으로
"파일에 있는 자료들을 스트림 버퍼를 이용해 프로그램에 입력한다."로 해석하면 될 것 같습니다.
간단하게 하면, 파일에 있는 자료들을 프로그램에 입력하는 클래스입니다.
그렇기 때문에 파일의 자료를 프로그램에 줄 수만 있고, 프로그램에서 가져올 수는 없습니다.
즉, 프로그램에서 파일의 데이터를 읽기만 할 수 있고, 쓸 수는 없습니다.
그럼 이제부터 파일을 읽는 법, ifstream의 사용법을 알아보겠습니다.
먼저, 파일을 열어야 합니다.
저는 두가지 방법을 사용합니다.
두 가지 방법 모두 hello.txt라는 파일을 찾고 읽어오는 코드입니다.
[사진 2]의 경우,
ifstream file;
...
if(...) file.open("hello.txt");
처럼 사용할 수 있습니다.
ifstream의 경우 파일이 존재하지 않을 경우 오류가 나지는 않지만,
파일이 열리지 않아 코드상 문제가 생길 수 있습니다.
그래서 파일이 열렸는지 확인하는 코드가 있습니다.
주석 처리한 코드도 모두 작동이 됩니다.
파일 열기 실패가 나왔습니다.
그럼 바탕화면에 hello.txt 파일을 생성하고 실행해보겠습니다.
파일 열기 실패가 나왔습니다.
그 이유는 바로 바탕화면이 아닌 cpp 파일이 있는 곳에 hello.txt 파일이 있어야 합니다.
저는 솔루션 이름이 Project1이고, Project1 디렉토리 안에 cpp 파일이 있습니다.
해당 디렉토리 안에 hello.txt 파일을 넣었습니다.
드디어 파일 열기 성공이 나왔습니다.
이제 파일 내부에 있는 내용을 읽어와보도록 하겠습니다.
getline 함수를 이용해서 파일에 있는 내용을 한 줄씩 읽었습니다.
성공적으로 hello.txt 파일에 있는 데이터를 읽어왔습니다.
파일 사용이 끝났으면 close() 함수로 파일을 닫습니다.
file.close(); 하면 파일을 성공적으로 닫을 수 있습니다.
파일 쓰기, ofstream
ofstream은 output file stream으로
"스트림 버퍼를 이용해 파일에 프로그램에 있는 데이터를 출력한다."로 해석하면 될 것 같습니다.
간단하게 하면, 프로그램의 출력을 파일에 하는 클래스입니다.
그렇기 때문에 콘솔창에 출력이 되지 않고, 파일에 바로 출력이 됩니다.
또, ifstream과 반대로 파일의 자료를 읽을 수 없습니다.
즉, 파일의 데이터를 읽을 수 없고, 쓸 수만 있습니다.
그럼 이제부터 파일에 데이터를 쓰는 법, ofstream의 사용법에 대해서 알아보겠습니다.
ofstream으로 bye.txt 파일을 여는 두가지 방법입니다.
ifstream과 달리 bye.txt 파일이 존재하지 않아도 생성이 됩니다.
단, bye.txt 파일이 이미 존재해도 데이터는 모두 삭제되며, bye.txt 파일이 새로 생성됩니다.
bye.txt 파일을 만들어 디렉토리에 넣고, [사진 11]을 실행해보겠습니다.
디렉토리 안의 bye.txt 파일의 내용이 없어진 것을 알 수 있습니다.
이제 bye.txt 파일에 데이터를 써보겠습니다.
콘솔 창에 출력할 때처럼,
file2 << "파일 쓰기!"; 라고 하면 file2에 데이터가 써집니다.
bye.txt에 데이터가 성공적으로 써졌습니다.
지금까지 기존 파일이 존재한다면 파일의 내용을 모두 읽어서 vector에 저장한 후,
vector의 값들을 다시 모두 파일에 써주는 방법을 사용했습니다.
하지만 인터넷 검색으로 더 간편한 방법을 찾았습니다.
출처 :
https://computer-science-student.tistory.com/49
std::ios::app을 open 함수에 추가해주면 이어쓰기가 가능해집니다.
[사진 14]의 코드를 지워주고,
[사진 17]로 코드를 변경했습니다.
저 코드를 한번 실행한 결과와 3번 실행한 결과를 보겠습니다.
파일 쓰기! 뒤에 \n이 없기 때문에 바로 뒤에 [사진 17]의 데이터가 작성된 것을 확인할 수 있습니다.
[
사진 15]와 비교하면 [사진 17]의 코드가 세번 추가된 것을 확인할 수 있습니다.
이렇게 간단하게 파일에 데이터를 추가할 수 있습니다.
혹시 여러분들이 참고할 수도 있으니,
제가 vector로 데이터를 읽고 쓴 코드를 올리겠습니다.
제가 공부한 부분을 정리한 내용이기 때문에 틀린 부분 있을 수 있습니다!!
혹시 틀린 부분이 있으면 알려주세요!!
'C++' 카테고리의 다른 글
[C++] map과 unordered_map이란? (2) | 2024.04.29 |
---|---|
[C++] 미로게임 | 미로 생성 알고리즘-프림 알고리즘 (0) | 2024.04.29 |
[C++] 미로게임 (0) | 2023.04.13 |
[C++] 동적 바인딩 (0) | 2023.04.02 |
[C++] 포인터 (0) | 2023.03.26 |