다음을 통해 공유


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 포함)

추가 정보