본문 바로가기

C++

[C++] 파일 입출력 - fopen_s, fread, fwrite

파일을 입출력할 때 파일의 데이터를 잠시 저장하기 위해 FILE 구조체를 사용한다. 

우선 파일의 데이터를 저장하기 위한 파일 포인터를 만들고, fopen_s 함수로 파일을 열어 액세스를 준비한다.

	FILE* pFile = NULL;

	fopen_s(&pFile, strPath.c_str(), "rb");

fopen_s는 pFile에 strpath 경로의 파일을 "rb" 모드로 연다. "rb"는 파일 열기 모드 중 이진 파일을 읽기 전용(read binary)으로 연다는 뜻이다. 파일 열기에 성공했을시 0을 반환한다. fopen과의 차이점은 SDL검사를 지원하기 때문에 전처리기를 추가할 필요가 없다. 

 

fread(&m_vecPixel[0], sizeof(PIXEL), m_vecPixel.size(), pFile);

pFile에 데이터를 저장했다면 fread로 m_vecPixel 벡터에 pFile로부터 데이터를 읽어 저장한다 . 두번째 인수는 저장할 데이터 요소 하나당 크기이고, 세번째 인수는 저장할 데이터 요소의 개수이다. 그래서 m_vecPixel[0]부터 sizeof(PIXEL)*m_vecPixel.size() 만큼의 데이터를 저장하면 [0]부터 차곡차곡 벡터에 데이터가 쌓이게 된다.

 

fwrite(&m_vecPixel[0], sizeof(PIXEL), m_vecPixel.size(), pFile);

파일을 출력할 때는 fwrite를 사용한다.프로젝트 파일이 있는 경로에 m_vecPixel 벡터에 저장된 데이터 파일로 생성한다.

 

fclose(pFile);

그리고 다 사용한 파일은 fclose함수로 닫아야 한다.