728x90

파일 관련 기본 함수

- 파일 생성 : CreateFile

    -> 파일도 커널 오브젝트가 생성되고 핸들이 반환

    -> File Pointer은 커널에 의해 관리

- 입력 및 출력 : ReadFile / WriteFile

- 파일 닫기 : CloseHandle

HANDLE CreateFile(
  LPCSTR                lpFileName,				// 파일 이름
  DWORD                 dwDesiredAccess,		// 읽기/쓰기 모드
  DWORD                 dwShareMode,			// 파일 공유 방식
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,	// 보안 속성
  DWORD                 dwCreationDisposition,	// 파일 생성 옵션
  DWORD                 dwFlagsAndAttributes,	// 파일 특성 정보
  HANDLE                hTemplateFile
);

BOOL ReadFile(
  HANDLE       hFile,							// 파일 핸들
  LPVOID       lpBuffer,						// 읽어들일 데이터 저장할 버퍼의 주소
  DWORD        nNumberOfBytesToRead,			// 읽을 데이터의 크기
  LPDWORD      lpNumberOfBytesRead,				// 실제 읽어들인 데이터의 크기를 저장할 변수의 주소
  LPOVERLAPPED lpOverlapped						// 파일 특성 정보
);

BOOL WriteFile(
  HANDLE       hFile,							// 파일 핸들
  LPCVOID      lpBuffer,						// 데이터를 저장하고 있는 버퍼의 주소
  DWORD        nNumberOfBytesToWrite,			// 저장할 데이터의 크기
  LPDWORD      lpNumberOfBytesWritten,			// 실제 저장된 데이터의 크기를 저장할 변수의 주소
  LPOVERLAPPED lpOverlapped						// 파일 특성 정보
);

BOOL CloseHandle(
  HANDLE hObject
);​

 

파일 정보 얻는 함수

- GetFileTime : 만든 날짜, 수정한 날짜, 엑세스한 날짜를 핸들을 통해 확인

- GetFileAttributes : 읽기 전용, 숨김, 보관과 같은 정보를 파일 이름을 통해 확인

- GetFileInformationByHandle : 위 두 함수에서 얻을 수 있는 정보를 핸들을 통해 확인

BOOL GetFileTime(
  HANDLE     hFile,
  LPFILETIME lpCreationTime,
  LPFILETIME lpLastAccessTime,
  LPFILETIME lpLastWriteTime
);

DWORD GetFileAttributesA(
  LPCSTR lpFileName
);

BOOL GetFileInformationByHandle(
  HANDLE                       hFile,
  LPBY_HANDLE_FILE_INFORMATION lpFileInformation
);

 

파일 포인터 이동 함수

DWORD SetFilePointer(
  HANDLE hFile,
  LONG   lDistanceToMove,
  PLONG  lpDistanceToMoveHigh,
  DWORD  dwMoveMethod				// 파일 포인터 이동 시 기준이 되는 위치
);

- 함수 실행 후 파일의 위치를 반환해줌

- 두 번째 인자와 세 번째 인자를 통해서 파일 포인터를 얼마나 이동할 지 설정하는데 32비트 기반이라면 4Byte가 최대이기 때문에 두 번째 인자에 정보를 넣고 세 번째 인자는 NULL로 설정하고 64비트 기반이라면 두 번째 인자에 하위 4바이트 정보, 세 번째 인자에 상위 4바이트 정보를 넣음

- 32비트에서는 파일의 최대 크기는 4GB -2

    -> 32비트로 표현할 수 있는 주소의 번지는 0 ~ 4G - 1

    -> 파일 관련 함수에 오류가 발생하면 INVALID_SET_FILE_POINTER라는 상수 값을 반환하는데 이 값이 -1(0xFFFFFFFF) 이고 이 값은 4G -1임

    -> 그렇기 때문에 4G - 1이 반환되었을 때 상수를 의미하는 지 파일의 실제 크기인지 혼란스럽기 때문에 사용하지 않음

 

728x90

+ Recent posts