FSCTL_SET_SPARSE IOCTL(winioctl.h)
표시된 파일을 스파스 또는 스파스 아님으로 표시합니다. 스파스 파일에서 큰 범위의 0에는 디스크 할당이 필요하지 않을 수 있습니다. 0이 아닌 데이터의 공간은 파일이 작성될 때 필요에 따라 할당됩니다.
이 작업을 수행하려면 다음 매개 변수를 사용하여 DeviceIoControl 함수를 호출합니다.
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to a file
FSCTL_SET_SPARSE, // dwIoControlCode
(PFILE_SET_SPARSE_BUFFER) lpInBuffer, // input buffer
(DWORD) nInBufferSize, // size of input buffer
NULL, // lpOutBuffer
0, // nOutBufferSize
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
설명
이 작업에 겹치는 I/O의 의미는 DeviceIoControl의 설명 섹션을 참조하세요.
FSCTL_SET_SPARSE 컨트롤 코드는 지정된 파일의 FILE_ATTRIBUTE_SPARSE_FILE 특성을 설정하거나 지웁니다.
Windows Server 2008 R2, Windows 7, Windows Server 2008 및 Windows Vista: 명확한 작업은 더 이상 스파스 지역이 없는 파일에서만 유효합니다. 스파스 지역이 있는 파일에서 명확한 작업을 수행하면 예측할 수 없는 결과가 발생할 수 있습니다. FSCTL_QUERY_ALLOCATED_RANGES 제어 코드를 사용하여 파일에 스파스 지역이 있는지 여부를 확인할 수 있습니다.
lpInBuffer 매개 변수가 NULL인 경우 작업은 FILE_SET_SPARSE_BUFFER 구조체의 SetSparse 멤버가 TRUE인 경우와 동일하게 동작합니다. 즉, 작업은 파일을 스파스 파일로 설정합니다.
Windows Server 2003 및 Windows XP:FILE_SET_SPARSE_BUFFER 구조체가 lpInBuffer 매개 변수에 전달되는 경우 SetSparse 멤버에 유효한 유일한 값은 TRUE이며, 이 값은 파일을 스파스 파일로 설정합니다. FILE_SET_SPARSE_BUFFER 구조에 FALSE를 전달하면 이 함수 호출이 실패합니다. 이 특성을 지우는 유일한 방법은 파일을 덮어쓰는 것입니다(예: CREATE_ALWAYS 플래그를 사용하여 CreateFile 함수를 호출).
dwFlagsAndAttributes 매개 변수에서 FILE_ATTRIBUTE_SPARSE_FILE사용하여 CreateFile을 호출하여 스파스 파일을 만들 수 없습니다. FSCTL_SET_SPARSE 제어 코드를 사용해야 합니다.
원격 파일에 대한 타임스탬프를 올바르게 업데이트하지 못할 수 있습니다. 일관된 결과를 보장하려면 버퍼가 없는 I/O를 사용합니다.
Windows 8 및 Windows Server 2012에서 이 코드는 다음 기술에서 지원됩니다.
기술 | 지원됨 |
---|---|
SMB(서버 메시지 블록) 3.0 프로토콜 | 예 |
SMB 3.0 TFO(투명 장애 조치(failover)) | 예 |
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0 | 예 |
CsvFS(클러스터 공유 볼륨 파일 시스템) | 주석을 참조하세요. |
ReFS(Resilient File System) | 예 |
CsvFs는 스파스 파일에 대해 리디렉션된 IO를 수행합니다. CsvFs를 사용하면 노드에서만 파일을 열 때만 파일 스파스를 만들 수 있습니다. SMB 3.0 투명한 장애 조치(failover)는 버퍼링된 쓰기를 지원하지 않습니다.
요구 사항
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
머리글 | winioctl.h(Windows.h 포함) |