OpenFile 함수(winbase.h)

파일을 만들거나, 열거나, 다시 열거나, 삭제합니다.

참고 이 함수에는 제한된 기능이 있으며 권장되지 않습니다. 새 애플리케이션 개발의 경우 CreateFile 함수를 사용합니다.
 

구문

HFILE OpenFile(
  [in]  LPCSTR     lpFileName,
  [out] LPOFSTRUCT lpReOpenBuff,
  [in]  UINT       uStyle
);

매개 변수

[in] lpFileName

파일 이름입니다.

문자열은 8비트 Windows 문자 집합의 문자로 구성되어야 합니다. OpenFile 함수는 유니코드 파일 이름 또는 명명된 파이프 열기를 지원하지 않습니다.

[out] lpReOpenBuff

처음 열 때 파일에 대한 정보를 수신하는 OFSTRUCT 구조체에 대한 포인터입니다.

구조체는 OpenFile 함수에 대한 후속 호출에서 열려 있는 파일을 확인하는 데 사용할 수 있습니다.

OFSTRUCT 구조체에는 길이가 128자인 OFS_MAXPATHNAME 문자로 제한되는 경로 문자열 멤버가 포함되어 있습니다. 따라서 OpenFile 함수를 사용하여 경로 길이가 128자를 초과하는 파일을 열 수 없습니다. CreateFile 함수에는 이 경로 길이 제한이 없습니다.

[in] uStyle

수행할 작업입니다.

이 매개 변수는 다음 값 중 하나 이상일 수 있습니다.

값 의미
OF_CANCEL
0x00000800
무시됩니다.

취소 단추가 포함된 대화 상자를 생성하려면 OF_PROMPT 사용합니다.

OF_CREATE
0x00001000
새 파일을 만듭니다.

파일이 있는 경우 길이가 0으로 잘립니다.

OF_DELETE
0x00000200
파일을 삭제합니다.
OF_EXIST
0x00004000
파일을 연 다음 닫습니다.

이를 사용하여 파일의 존재를 테스트합니다.

OF_PARSE
0x00000100
OFSTRUCT 구조를 채우지만 다른 작업은 수행하지 않습니다.
OF_PROMPT
0x00002000
요청된 파일이 없는 경우 대화 상자를 표시합니다.

대화 상자는 시스템에서 파일을 찾을 수 없으며 다시 시도 및 취소 단추가 포함되어 있음을 사용자에게 알립니다. 취소 단추는 파일을 찾을 수 없는 오류 메시지를 반환하도록 OpenFile에 지시합니다.

OF_READ
0x00000000
읽으려는 경우에만 파일을 엽니다.
OF_READWRITE
0x00000002
읽기/쓰기 권한으로 파일을 엽니다.
OF_REOPEN
0x00008000
다시 열기 버퍼의 정보를 사용하여 파일을 엽니다.
OF_SHARE_COMPAT
0x00000000
MS-DOS 기반 파일 시스템의 경우 호환성 모드가 있는 파일을 열고 지정된 컴퓨터의 모든 프로세스에서 파일을 여러 번 열 수 있습니다.

다른 공유 모드를 사용하여 파일을 열려는 다른 노력이 실패합니다. 이 플래그는 CreateFile 함수의 FILE_SHARE_READ|FILE_SHARE_WRITE 플래그에 매핑됩니다.

OF_SHARE_DENY_NONE
0x00000040
다른 프로세스에 대한 읽기 또는 쓰기 액세스를 거부하지 않고 파일을 엽니다.

MS-DOS 기반 파일 시스템에서 파일이 다른 프로세스에 의해 호환 모드로 열려 있으면 함수가 실패합니다.

이 플래그는 CreateFile 함수의 FILE_SHARE_READ|FILE_SHARE_WRITE 플래그에 매핑됩니다.

OF_SHARE_DENY_READ
0x00000030
파일을 열고 다른 프로세스에 대한 읽기 액세스를 거부합니다.

MS-DOS 기반 파일 시스템에서 파일이 호환 모드로 열려 있거나 다른 프로세스의 읽기 액세스를 위해 열려 있는 경우 함수가 실패합니다.

이 플래그는 CreateFile 함수의 FILE_SHARE_WRITE 플래그에 매핑됩니다.

OF_SHARE_DENY_WRITE
0x00000020
파일을 열고 다른 프로세스에 대한 쓰기 액세스를 거부합니다.

MS-DOS 기반 파일 시스템에서 파일이 호환 모드로 열려 있거나 다른 프로세스의 쓰기 액세스에 대해 열려 있는 경우 함수가 실패합니다.

이 플래그는 CreateFile 함수의 FILE_SHARE_READ 플래그에 매핑됩니다.

OF_SHARE_EXCLUSIVE
0x00000010
전용 모드로 파일을 열고 다른 프로세스에 대한 읽기/쓰기 액세스를 모두 거부합니다. 현재 프로세스에서도 읽기/쓰기 액세스를 위해 다른 모드로 파일을 연 경우 함수가 실패합니다.
OF_VERIFY
파일의 날짜와 시간이 이전에 열린 날짜와 같은지 확인합니다.

이는 읽기 전용 파일에 대한 추가 검사 유용합니다.

OF_WRITE
0x00000001
쓰기 액세스용으로만 파일을 엽니다.

반환 값

함수가 성공하면 반환 값은 파일 I/O를 수행할 때 사용할 파일 핸들을 지정합니다. 파일을 닫려면 이 핸들을 사용하여 CloseHandle 함수를 호출합니다.

함수가 실패하면 반환 값이 HFILE_ERROR. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

lpFileName 매개 변수가 파일 이름과 확장명만 지정하는 경우 이 함수는 다음 디렉터리와 표시된 순서에서 일치하는 파일을 검색합니다.

  1. 애플리케이션이 로드되는 디렉터리입니다.
  2. 현재 디렉터리
  3. Windows 시스템 디렉터리입니다.

    GetSystemDirectory 함수를 사용하여 이 디렉터리의 경로를 가져옵니다.

  4. 16비트 Windows 시스템 디렉터리입니다.

    이 디렉터리의 경로를 검색하는 함수는 없지만 검색됩니다.

  5. Windows 디렉터리입니다.

    GetWindowsDirectory 함수를 사용하여 이 디렉터리의 경로를 가져옵니다.

  6. PATH 환경 변수에 나열된 디렉터리입니다.
lpFileName 매개 변수는 와일드카드 문자를 포함할 수 없습니다.

OpenFile 함수는 16비트 Windows OpenFile 함수가 지원하는 OF_SEARCH 플래그를 지원하지 않습니다. OF_SEARCH 플래그는 파일 이름에 전체 경로가 포함된 경우에도 시스템에서 일치하는 파일을 검색하도록 지시합니다. SearchPath 함수를 사용하여 파일을 검색합니다.

uStyle 매개 변수의 값이 다른 액세스 플래그가 있는 OF_DELETE 액세스 플래그 OR'ed이고 FILE_SHARE_DELETE 공유 액세스를 사용하여 원격 파일 또는 디렉터리를 열지 않은 경우 원격 컴퓨터에서 삭제를 위해 파일 또는 디렉터리를 열려고 하면 공유 위반이 발생합니다. 이 시나리오에서 공유 위반을 방지하려면 OF_DELETE 액세스만 있는 원격 파일 또는 디렉터리를 열거나 삭제를 위해 파일 또는 디렉터리를 먼저 열지 않고 DeleteFile 을 호출합니다.

Windows 8 및 Windows Server 2012에서 이 함수는 다음 기술을 통해 지원됩니다.

기술 지원됨
SMB(서버 메시지 블록) 3.0 프로토콜 예
SMB 3.0 TFO(투명 장애 조치(failover)) 예
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0 예
CsvFS(클러스터 공유 볼륨 파일 시스템) 예
ReFS(Resilient File System) 예
 

CsvF는 압축된 파일에 대해 리디렉션된 IO를 수행합니다.

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winbase.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

CreateFile

파일 관리 함수

GetSystemDirectory

GetWindowsDirectory

OFSTRUCT

SearchPath