CreateFile(
LPCTSTR lpFileName, ------①
DWORD dwDesiredAccess, -------②
DWORD dwShareMode, ------③
LPSECURITY_ATTRIBUTES pSecurityAttributes, -----④
DWORD dwCreationDisposition, -------⑤
DWORD dwFlagsAndAttributes, --------⑥
HANDLE hTemplateFile -------⑦
);
함수 설명 :
WindowsAPI함수 중에서 파일을 생성하는 가장 기본적인 함수이다. 또한 단지 파일을 생성하는 것뿐만 아니라 기존의 파일을 열수도 있으며 각종 오브젝트를 생성하고 열 수도 있다.
- 파이프
- 메일슬롯
- COM 포트 등의 통신 장치
- 디스크장치
- 콘솔
- 디렉토리
성공할경우 파일의 핸들을 리턴한다. 때문에 사용을 다 한 후에는 CloseHandle()로 핸들을 닫아 주어야한다.
① IpFileName :
생성하고자 하는 파일(또는 오브젝트)의 이름을 지정한다. 파일으 이름은 최대 MAX_PATH의 길이로 지정 가능할수 있다. 경로로 완전경로를 줄거나 상대경로로도 줄 수 있다.
② dwDesiredAccess :
파일에 대한 액세스 권한을 지정한다. 생성하거나 연 파일로 어떤 작업을 할 것인가에 따라 적절한 엑세스 권할을 지정한다.
Flag |
설명 |
0 |
오브젝트에 대한 쿼리만 엑세스 요청한다. 이 권한으로 장치를 열 경우 실제로 장치를 엑세스 하지 않고도 장치의 특성을 조사할 수 있다. Ex) 오브젝트의 타입, 용량, 등등.... |
GENERIC_READ |
읽기 위한 용도로 파일을 연다. 이 엑세스 권한으로 열 경우에는 파일을 읽기만 가능하다. |
GENERIC_WRITE |
쓰기 위한 용도로 파일을 연다. 이 엑세스 권한으로 열 경우에는 오직 쓰기만 가능하다 |
GENERIC_READ | | 이 경우에는 읽기와 쓰기가 모두 가능하다. |
등등 더 많은 종류의 플래그가 있지만 생략한다.
③ dwShareMode :
파일의 공유 모드를 지정한다. 공유 모드란 파일이 열려저 있는 상태에서 다른 프로세스가 또 이 파일을 오픈할 때 이를 허가 할 것인지 아닌지를 정한다. 만약 다른 프로세스에서 읽을수 없도록 하고싶다면 공유 모드를 지정하지 않아야 한다.
Flag |
설명 |
FILE_SHARE_READ |
다른 프로세스가 읽기 엑세스 요청을 했을때 허가한다. |
FILE_SHARE_WRITE |
다른 프로세스가 쓰기 엑세스 요청을 했을때 허가한다. |
FILE_SHARE_DELETE |
삭제 엑세스 요청을 했을때 허가한다. |
④ pSecurityAttributes :
파일의 보안 속성을 지정하는 SECURITY_ATTRIBUTES 구조체 포인터이다. 차일드 프로세스로 핸들을 상속할 수 있는지 없는지가 결정된다. NULL일 경우에는 상속이 불가능하다.
⑤ dwCreationDisposition :
파일의 유무를 체크하고 새로 생성할지 말지를 정한다.
flag |
설명 |
CREATE_NEW |
파일을 새로 만든다. 이미 존재하면 에러 반환. |
CREATE_ALWAYS |
항상 파일을 새로 만든다. 이미 존재할경우 새로 덮어쓴다. |
OPEN_EXISTING |
이미 존재하는 파일을 연다. 없을경우 에러를 반환한다. 파일이 아닌 장치를 열때는 이 플래그를 사용해야한다. |
OPEN_ALWAYS |
무조건 파일을 연다. 파일이 없을경우 새로 만든후 파일을 연다. 파일이 없어도 에러를 반환하지 않는다. |
TRUNCATE_EXISTUNG |
파일을 연 후 크기를 0으로 만든다. 즉 파일을 다시 작성하고자 할때에 이 권한으로 열어야 한다. |
⑥ dwFlagsAndAttributes
: 생성할 파일의 속성 또는 기타 오브젝트의 속정을 지정한다. 파일의 속성은 플래그 조합을 사용할 수 있다.
flag |
설명 |
FILE_ATTRIBUTE_ARCHIVE |
기록 속성을 설정한다. 기록 속성으로는 백업, 리스토어 프로그램에 의해 사용되며 파일이 백업되어야 함을 알라는 flag이다. |
FILE_ATTRIBUTE_ENCRYPTED |
파일을 암호화한다. 디렉토리의 경우에는 이후에 생기는 파일과 서브디렉토리를 암호화 한다. 시스템 파일에는 적용되지 않음. |
FILE_ATTRIBUTE_HIDDEN |
숨김 파일로 생성한다. 숨김 파일은 통상적으로는 목록에 나타나지 않는다. |
FILE_ATTRIBUTE_NORMAL |
아무런 속성이 없는 파일을 만든다. 이 플래그는 단독으로 사용될때만 유용하다. |
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED |
컨텐트 인덱싱 서비스에 대해 인덱스 되지 않는다. |
FILE_ATTRIBUTE_OFFLINE |
데이터가 오프라인 상태이며 즉시 사용할수 있는 상태가 아니다. 이속성은 원격 저장소에 의해 사용됨으로 응용프로그램에는 사용해서는 안된다. |
FILE_ATTRIBUTE_READONLY |
읽기 전용의 파일로 생성한다. |
FILE_ATTRIBUTE_SYSTEM |
시스탬 파일로 생성한다. 운영체제에 의해 배타적으로 사용되는 파일이다. |
FILE_ATTRIBUTE_TEMPORARY | 임시 파일로 생성한다. 임시 파일은 디스크로 곡바로 입출력을 행하지 않고 가급적이면 메모리상에서 읽고 쓰기 때문에 일반 파일보다 속도가 빠르다. 다 사용한 후에는 반드시 삭제하여야 한다. |
파일 속성과 함께 다음 플래그들도 같이 지정할 수 있다.
flag | 설명 |
FILE_FLAG_WRITE_THROUGH | 개시를 사용하지 않고 곡바로 디스크로 입출력을 행하도록 한다. |
FILE_FLAG_OVERLAPPED |
파일 입출력이 완전히 끝날 때까지 대기하지 않고 곧바로 리턴하는 비동기 입출력 모드로 파일을 연다. |
FILE_FLAG_NO_BUFFERING |
버퍼링이나 캐시를 하지 않음으로써 비동기 효율을 극대화한다. 이 플래그를 사용할때 요구 조건이 있다. |
FILE_FLAG_RANDOM_ACCESS | 파일을 랜덤으로 엑세스한다는것을 시스템에게 알려준다. 시스템은 캐시를 최적화 할 때 이 정보를 사용한다. |
FILE_FLAG_SEQUENTIAL_SCAN |
파일을 순차적으로 엑세스 한다는것을 시스템에 알려준다. 시스템은 캐시 최적화에 이 정보를 사용하여 순차 엑세스의 효울을 높일 수 있는 방식으로 캐시를 사용한다. 그러나 이 플래그를 사용하지 않아도 순차적으로 엑세스를 한다. |
FILE_FLAG_DELETE_ON_CLOSE | 파일에 대한 모든 핸들이 닫히면 파일을 삭제하도록 한다. |
FILE_FLAG_BACKUP_SEMANTICS |
백업, 리스토어를 위해 파일을 연다. 이경우 시스템은 보안을 무시한다. |
FILE_FLAG_POSIX_SEMANTICS |
파일을 POSIX 규칙대로 엑세스한다. 파일명은 대소문자를 구분하며 대소문자만 다른 같은 파일명을 엑세스할 수 있다. |
⑦ hTemplateFile :
생성될 파일의 속성을 제공할 템플릿이다. 보통은 NULL이다.
참고 : sone.kr
'Programming > Windows&C#' 카테고리의 다른 글
[Windows/WinAPI] WriteFile() (0) | 2013.10.15 |
---|---|
[Windows/WinAPI] ReadFile() (0) | 2013.10.15 |
[Windows/WinAPI] LoadLibrary, GetProcAddress 사용 (실습5) (2) | 2013.10.12 |
[Windows/WinAPI] main ,_tmain간의 차이 (0) | 2013.10.09 |
[Windows/WinAPI] 레지스트리 Key 생성하기(실습4) (0) | 2013.10.04 |