본문 바로가기

API / MFC/Function Information

CreateFile Function(Windows / WINCE)

파일을 생성하거나 기존파일이나 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 설정



참조 : http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx
         윈도우즈 API 정복(김상형 저)
         윈도우 임베디드 CE6.0 프로그래밍(더글라스 볼링 저)

'API / MFC > Function Information' 카테고리의 다른 글

[windows] FindFirstFile Function  (0) 2010.04.12
WriteFile & ReadFile Function(Windows / WINCE)  (0) 2010.03.30
SendDlgItemMessage Function  (0) 2010.03.30
PostMessage & SendMessage  (0) 2010.03.29
CFileFind Class  (0) 2010.03.23