파일을 생성하거나 기존파일이나 I/O 디바이스를 열기 위한 win32표준 함수
I/0 디바이스 : file, file stream, directory, physical disk, volume, console buffer,
tape drive, communications resource, mailslot, pipe
HANDLE WINAPI CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
lpFileName
┣> 열거나 읽을 파일이름
┣> 파일이름은 전체 경로를 줘야 함(최대 길이 : MAX_PATH = 260 바이트)
┣> 파일 길이가 초과 할 경우 유니코드 버전 호출 후 "\\?\"를 덧붙여 주면 됨
┃ (단, win CE에서는 "\\?\" 문자열을 지원하지 않음)
┗> 네트워크 서버 참조 할 때는 "\\<서버 name>\<공유 name>" 형식으로 사용
===================================================================================
dwDesiredAccess
┣> 장치나 파일을 어떤 모드로 액세스 할 지 정해주는 부분
┣> GENERIC_READ(읽기 권한), GENERIC_WRITE(쓰기 권한)
┗> 0을 이용하여 읽기나 쓰기를 사용하지 않거나 OR을 이용하여 중복사용 가능
===================================================================================
dwShareMode
┣> 파일을 어떤 특성으로 열것인가를 설정하는 부분(읽기, 쓰기)
┗> FILE_SHARE_READ(파일 읽기만 가능), FILE_SHARE_WRITE(파일 쓰기만 가능)
===================================================================================
lpSecurityAttributes
┣> 리턴된 핸들을 차일드 프로세스로 상속할 것인지 아닌지를 지정하는 SECURITY_ATTRIBUTES 구조체 포인터
┣> NULL을 사용할 경우 사용하지 않음
┗> WIN CE에서는 lpSecurityAttributes 파라미터를 무시하므로 무조건 NULL
===================================================================================
dwCreationDisposition
┣> 파일을 어떻게 열고 생성을 할 것은지에 대해서 설정
┃
┣> CREATE_NEW
┃ ┗ 새로운 파일 생성, 이미 파일이 존재하면 실패
┣> CREATE_ALWAYS
┃ ┗ 새로운 파일을 생성하거나, 파일이 있을 시 파일을 덮어씀(크기: 0BYTE)
┣> OPEN_EXISTING
┃ ┗ 기존 파일이 있으면 파일을 열고, 없으면 에러 코드 발생
┣> OPEN_ALWAYS
┃ ┗ 파일이 존재하지 않으면 생성하고, 파일이 있으면 기존파일을 연다
┗> TRUNCATE_EXISTING
┗ 기존파일을 열고 기존파일을 0 BYTE로 초기화 시킴
GENERIC_WRITE로 파일을 열어야 이 플래그 사용가능
===================================================================================
dwFlagsAndAttributes
┣> 파일의 속성을 설정
┃
┃
┣> FILE_ATTRIBUTE_ARCHIVE
┃ ┗ 파일의 아카이브비트(파일의 백업 여부) 설정
┃
┣> FILE_ATTRIBUTE_ENCRYPTED
┃ ┗ 파일이나 디렉토리가 암호화 속성을 가짐
┃ 파일은 데이터가 암호화되고
┃ 디렉토리는, 디렉토리안에 새롭게 작성되는 파일이나 서브 디렉토리가
┃ 디폴트로 암호화 되며, FILE_ATTRIBUTE_SYSTEM 지정이 되면 적용안됨
┃
┣> FILE_ATTRIBUTE_HIDDEN
┃ ┗ 파일의 숨김 비트 설정
┃
┣> FILE_ATTRIBUTE_NORMAL
┃ ┗ 아무 속성도 가지지 않는 파일, 단독으로 쓰여야 함
┃
┣> FILE_ATTRIBUTE_OFFLINE
┃ ┗ 연결되지 않은 저장 장치에 있어 즉시 사용할 수 없는 파일
┃
┣> FILE_ATTRIBUTE_READONLY
┃ ┗ 파일을 읽기 전용 속성 비트 설정
┃
┣> FILE_ATTRIBUTE_SYSTEM
┃ ┗ 파일이 중요한 시스템 파일임을 나타내는 시스템 비트 설정
┃
┣> FILE_ATTRIBUTE_TEMPORARY
┃ ┗ 임시 저장소에 저장되는 파일, 디스크에 저장이 되지 않고
┃ 메모리에 저장되어 연결 속도가 빠르며 사용 후 반드시 삭제해야 함
┃
┃
┃
┣> FILE_FLAG_BACKUP_SEMANTICS
┃ ┗ 백업이나 복원을 위해 파일이 열리거나 생성
┃
┣> FILE_FLAG_DELETE_ON_CLOSE
┃ ┗ 핸들이 닫힌 후 파일 삭제
┃
┣> FILE_FLAG_NO_BUFFERING
┃ ┗ 파일이나 디바이스를 데이터의 읽기와 쓰기의 시스템 캐싱 없이 연다
┃
┣> FILE_FLAG_OPEN_NO_RECALL
┃ ┗ 원격 저장 장치에서 사용하는 플래그
┃
┣> FILE_FLAG_OPEN_REPARSE_POINT
┃ ┗ reparse point를 작동시키지 않고 파일을 염
┃
┣> FILE_FLAG_OVERLAPPED
┃ ┗ 파일이나 디바이스 비동기 I/O로 열거나 생성함
┃
┣> FILE_FLAG_POSIX_SEMANTICS
┃ ┗ POSIX 규칙대로 파일을 액세스 함
┃ 16Bit 윈도우나 MS-DOS에서는 사용할 수 없음
┃
┣> FILE_FLAG_RANDOM_ACCESS
┃ ┗ 임의의 접근 파일임을 나타냄
┃
┣> FILE_FLAG_SEQUENTIAL_SCAN
┃ ┗ 순차적 접근 파일임을 나타냄
┃
┣> FILE_FLAG_WRITE_THROUGH
┃ ┗ 데이터 출력시 캐시를 통하지 않고 곧바로 디스크로 출력
┃
┃
┗> 단, WINCE에서는
FILE_ATTRIBUTE_OFFLINE, FILE_FLAG_OVERLAPPED, FILE_FLAG_NO_BUFFERING,
FILE_FLAG_SEQUENTIAL_SCAN, FILE_FLAG_DELETE_ON_CLOSE,
FILE_FLAG_BACKUP_SEMANTICS, FILE_FLAG_POSIX_SEMANTICS등을 지원하지 않음
FILE_ATTRIBUTE_TEMPORARY 플래그는 분리된 드라이브나 네트워크 공유 디렉토리를 나타낼때 사용
===================================================================================
hTemplateFile
┣> 새로만들고자 하는 파일의 추가 속성을 지원하는 템플릿 파일의 핸들 지정
┣> 통상 사용되지 않아서 NULL로 지정하는 게 보통
┗> WINCE에서는 무시되므로 NULL 설정
[출처] CreateFile 상세 설명|작성자 메르카츠
https://t1.daumcdn.net/cfile/tistory/1719753D4D23B61432