바이트나 블록 단위로 입출력
데이터 종류에 따라 텍스트(문자) / 바이너리 (문자, 이미지 등 ) 파일로 나뉜다.
텍스트 파일
- 글자 혹은 문자로만 구성되는 문서 파일
바이너리 파일
- 사진, 이미지, 오디오, 그래픽 이미지, 컴파일된 코드 등 문자로 표현되지 않는 바이너리 정보들
// w 쓰겠다.
// r 읽겠다.
// +
// t 텍스트
// b 바이너리
1. fopen_s()
- 파일을 열거나 만드는 함수입니다.
- 따로 수정하지 않는다면 없으면 만들어 버립니다.
fopen_s(&FileHandle, Path.c_str(), Mode.c_str());
//fopen_s(&FileHandle, "aaaa.txt", "wt");
2. fwrite()
- void const* _Buffer, => 내가 저장하려고 하는 주소
- size_t _ElementSize, => 그 주소부터 몇바이트를 저장할것인지 자료의 크기
- size_t _ElementCount, => 그걸 몇번 저장할건지 3 Ex) 4 3 int를 한파일에 3번 저장해준다.
- FILE* _Stream 파일의 핸들.
std::vector<char> Data = {'d','1','2'};
std::string Data2 = "안녕하세요오ㅓㅇ우우ㅜ";
fwrite(&Data2[0], Data2.size(), 1, FileHandle);
fclose(FileHandle);
3. fread() -> 파일에 쓴다. 어떤 데이터를
//void const* _Buffer, => 내가 저장하려고 하는 주소
//size_t _ElementCount, => 그걸 몇번 저장할건지 3 Ex) 4 3 int를 한파일에 3번 저장해준다.
//FILE* _Stream 파일의 핸들.
// 읽을려는 사이즈가 얼마냐를 적을수 있다.
EIOOpenMode OpenMode = EIOOpenMode::None;
FILE* FileHandle = nullptr;
char Arr[100] = {};
void Load(EIOOpenMode _OpenType, EIODataType _DataType)
{
std::string Path = GetPath();
std::string Mode;
switch (_OpenType)
{
case EIOOpenMode::Write:
OpenMode = EIOOpenMode::Write;
Mode += "w";
break;
case EIOOpenMode::Read:
OpenMode = EIOOpenMode::Read;
Mode += "r";
break;
default:
break;
}
switch (_DataType)
{
case EIODataType::Binary:
Mode += "b";
break;
case EIODataType::Text:
Mode += "t";
break;
default:
break;
}
//std::string a=Path.c_str();
fopen_s(&FileHandle, Path.c_str(), Mode.c_str());
if (FileHandle == nullptr)
{
return;
}
fread(&Arr[0], 100, 1, FileHandle);
}
개발 순서
(1) 파일 오픈
(2) 작업
(3) 파일 Close