Binary File 이란? 외부에서 읽을 수 없는 파일, 읽는 속도가 굉장히 빠르다.(.txt 비교시), 가공하지 않은 상태 그대로가 저장된다.
참조 : fileapi.h
FileOpen -> CreateFile() 함수 FileHandle리턴함
HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); |
ex)
Read
fileHandle = CreateFile
(
filePath.c_str()
, GENERIC_READ
, FILE_SHARE_READ
, NULL
, OPEN_EXISTING
, FILE_ATTRIBUTE_NORMAL
, NULL
);
Write
fileHandle = CreateFile
(
filePath.c_str()
, GENERIC_WRITE
, 0
, NULL
, openOption // 옵션은 기본값 2U -> CREATE_ALWAYS(항상 새로운 파일을 만든다.)
, FILE_ATTRIBUTE_NORMAL
, NULL
);
참조 : handleapi.h
FileClose -> CloseHandle()
CloseHandle( _In_ _Post_ptr_invalid_ HANDLE hObject ); |
참조 : fileapi.h
WriteData -> WriteFile()
WriteFile( _In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped ); |
* Tip : 데이터 크기만큼, 데이터 쓰면 된다.
ex) WriteFile(fileHandle, &data, sizeof(float), &size, NULL);
참조 : fileapi.h
ReadData -> ReadFile()
ex )
* Tip : Write 했던 데이터 순서, 크기만큼, 읽는다.
float temp = 0.0f;
ReadFile(fileHandle, &temp, sizeof(float), &size, NULL);
큰 구조체들은 순서대로 하나씩 읽어들여서 처리하자.
D3DXMATRIX FileReader::ReadMatrix()
{
D3DXMATRIX matrix;
matrix._11 = Float(); matrix._12 = Float(); matrix._13 = Float(); matrix._14 = Float();
matrix._21 = Float(); matrix._22 = Float(); matrix._23 = Float(); matrix._24 = Float();
matrix._31 = Float(); matrix._32 = Float(); matrix._33 = Float(); matrix._34 = Float();
matrix._41 = Float(); matrix._42 = Float(); matrix._43 = Float(); matrix._44 = Float();
return matrix;
}
* 참고
문자열이 들어있지 않은 구조체라면 한번에 읽고쓰는 것이 가능하다.
Byte크기 만큼 읽거나 쓰면 됨
문자열은 고정길이 문자열이 아닌 이상 byte 크기가 가변적이다.
문자열을 고정길이로 사용하거나, 문자열이 구조체에 포함이 안되어있다면 가능하다.
void FileWriter::Byte(void * data, UINT dataSize)
{
WriteFile(fileHandle, data, dataSize, &size, NULL);
}
void FileReader::Byte(void ** data, UINT dataSize)
{
ReadFile(fileHandle, *data, dataSize, &size, NULL);
}
'WinAPI > 기본 문법' 카테고리의 다른 글
유니코드, 멀티바이트 차이점 (1) | 2022.09.28 |
---|---|
VirtualAlloc() 함수 (0) | 2022.02.17 |