기존 파일을 삭제합니다. lpFileName의 일부가 재구문 지점 또는 기호 링크를 통해 리디렉션되는 경우 이 함수는 실패합니다.
이 작업을 트랜잭션 작업으로 수행하려면 DeleteFileTransacted 함수를 사용합니다.
문법
BOOL DeleteFile2A(
LPCSTR lpFileName,
DWORD Flags
);
매개 변수
lpFileName
삭제할 파일의 이름입니다.
기본적으로 이름은 MAX_PATH 문자로 제한됩니다. 이 제한을 32,767자로 확장하려면 경로 앞에 "\\?\"를 추가합니다. 자세한 내용은 이름 지정 파일, 경로 및 네임스페이스를 참조하세요.
팁 (조언)
"\\?\" 앞에 추가하지 않고 MAX_PATH 제한을 제거하도록 옵트인할 수 있습니다. 자세한 내용은 파일, 경로 및 네임스페이스의 "최대 경로 길이 제한" 섹션을 참조하세요.
Flags
삭제되는 파일을 처리하는 방법을 지정하는 플래그입니다. 이 매개 변수는 다음 값 중 하나의 조합일 수 있습니다.
| 가치 | 의미 |
|---|---|
FILE_FLAG_DISALLOW_PATH_REDIRECTS0x00010000 |
재문 분석 지점 또는 기호 링크로 lpFileName 이 리디렉션되지 않도록 방지합니다. |
반환 값
함수가 성공하면 반환 값은 0이 아닌 값입니다.
함수가 실패하면 반환 값은 0(0)입니다. 확장 오류 정보를 얻으려면 GetLastError호출합니다. 가능한 오류는 다음과 같습니다.
| 반환 코드 | 설명 |
|---|---|
| ERROR_PATH_REDIRECTED | lpFileName 은 재문 분석 지점 및/또는 기호 링크에 의해 리디렉션되었습니다. |
비고
애플리케이션이 존재하지 않는 파일을 삭제하려고 하면 ERROR_FILE_NOT_FOUND DeleteFile2 함수가 실패합니다. 파일이 읽기 전용 파일인 경우 함수는 ERROR_ACCESS_DENIED 함께 실패합니다.
다음 목록에서는 파일을 삭제, 제거 또는 닫기 위한 몇 가지 팁을 식별합니다.
- 읽기 전용 파일을 삭제하려면 먼저 읽기 전용 특성을 제거해야 합니다.
- 파일을 삭제하거나 이름을 바꾸려면 파일에 대한 삭제 권한이 있거나 부모 디렉터리에서 자식 권한을 삭제해야 합니다.
- 디렉터리에서 파일을 재귀적으로 삭제하려면 SHFileOperation 함수를 사용합니다.
- 빈 디렉터리를 제거하려면 RemoveDirectory 함수를 사용합니다.
- 열려 있는 파일을 닫려면 CloseHandle 함수를 사용합니다.
자식 삭제 및 삭제를 제외한 모든 액세스 권한이 있는 디렉터리를 설정하고 새 파일의 ACL(액세스 제어 목록)을 상속하는 경우 파일을 삭제하지 않고도 만들 수 있습니다. 그러나 파일을 만든 다음, 파일을 만들 때 반환되는 핸들에 대해 요청하는 모든 액세스 권한을 가져올 수 있습니다.
파일을 만들 때 삭제 권한을 요청하는 경우 해당 핸들을 사용하여 파일을 삭제하거나 이름을 바꿀 수 있지만 다른 핸들은 사용하지 않을 수 있습니다. 자세한 내용은 파일 보안 및 액세스 권한을 참조하세요.
애플리케이션이 일반 I/O 또는 메모리 매핑된 파일로 열려 있는 다른 핸들이 있는 파일을 삭제하려고 하면 DeleteFile2 함수가 실패합니다(다른 핸들을 열 때 FILE_SHARE_DELETE 지정해야 합니다).
DeleteFile2 함수는 닫을 때 삭제할 파일을 표시합니다. 따라서 파일의 마지막 핸들을 닫을 때까지 파일 삭제가 발생하지 않습니다. 파일을 열기 위해 CreateFile, CreateFile2 또는 CreateFile3 에 대한 후속 호출은 ERROR_ACCESS_DENIED 함께 실패합니다.
POSIX 삭제를 사용하면 핸들이 열려 있는 동안 파일이 삭제됩니다. 파일을 열기 위해 CreateFile 에 대한 후속 호출은 ERROR_FILE_NOT_FOUND 함께 실패합니다.
기호화된 링크 동작
경로가 기호 링크를 가리키는 경우 기호 링크는 대상이 아니라 삭제됩니다. 대상을 삭제하려면 CreateFile 을 호출하고 FILE_FLAG_DELETE_ON_CLOSE 지정해야 합니다.
이 함수는 다음 기술에서 지원됩니다.
| 기술 | 지원됨 |
|---|---|
| SMB(서버 메시지 블록) 3.0 프로토콜 | 예 |
| SMB 3.0 TFO(투명한 장애 조치(failover) | 예 |
| SO(스케일 아웃 파일 공유)가 있는 SMB 3.0 | 예 |
| CsvFS(클러스터 공유 볼륨 파일 시스템) | 예 |
| ReFS(복원 파일 시스템) | 예 |
비고
헤더는 fileapi.hDELETEFile2 를 UNICODE 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입 대한규칙을 참조하세요.
예시
예를 들어 파일에서 바이트 범위 잠금 및 잠금 해제를 참조하세요.
요구 사항
| 요구 사항 | 가치 |
|---|---|
| 지원되는 최소 클라이언트 | Windows 11 24H2 [데스크톱 앱 | UWP 앱] |
| 지원되는 최소 서버 | Windows Server 2025 [데스크톱 앱 | UWP 앱] |
| 헤더 | fileapi.h(Windows.h 포함) |
| 라이브러리 | Kernel32.lib |
| DLL | Kernel32.dll |