스파스 파일 작업
파일 시스템에서 스파스 파일을 지원하는지 여부를 확인하려면 GetVolumeInformation 함수를 호출하고 lpFileSystemFlags 매개 변수를 통해 반환된 FILE_SUPPORTS_SPARSE_FILES 비트 플래그를 검사합니다.
대부분의 애플리케이션은 스파스 파일을 인식하지 못하며 스파스 파일을 만들지 않습니다. 애플리케이션이 스파스 파일을 읽고 있다는 사실은 애플리케이션에 투명합니다. 스파스 파일을 인식하는 애플리케이션은 해당 데이터 집합이 스파스 파일에 보관하기에 적합한지 여부를 결정해야 합니다. 이 결정이 내려지면 애플리케이션은 FSCTL_SET_SPARSE 제어 코드를 사용하여 파일을 스파스로 명시적으로 선언해야 합니다.
애플리케이션이 파일을 스파스로 설정한 후 애플리케이션은 FSCTL_SET_ZERO_DATA 제어 코드를 사용하여 파일 영역을 0으로 설정할 수 있습니다. 또한 애플리케이션은 FSCTL_QUERY_ALLOCATED_RANGES 제어 코드를 사용하여 스파스 파일에서 0이 아닌 데이터를 빠르게 검색할 수 있습니다.
데이터가 0에 불과하다는 쓰기 작업(FSCTL_SET_ZERO_DATA이외의 함수 또는 연산 포함)을 수행하면 쓰기의 전체 길이에 대해 0이 디스크에 기록됩니다. 파일 범위를 0으로 유지하고 스파스를 유지하려면 FSCTL_SET_ZERO_DATA사용합니다.
스파스 인식 애플리케이션은 기존 파일을 스파스로 설정할 수도 있습니다. 애플리케이션에서 기존 파일을 스파스로 설정하는 경우 0이 포함된 지역에 대한 파일을 검색하고 FSCTL_SET_ZERO_DATA 사용하여 해당 지역을 다시 설정하여 일부 실제 디스크 스토리지의 할당을 취소할 수 있습니다. 스파스 파일 인식으로 업그레이드된 애플리케이션은 이 변환을 수행해야 합니다.
스파스 파일의 0아웃 부분에서 읽기 작업을 수행하는 경우 운영 체제가 하드 디스크 드라이브에서 읽지 못할 수 있습니다. 대신, 시스템은 읽을 파일의 부분에 0이 포함되어 있음을 인식하고 디스크에서 실제로 읽지 않고 0으로 가득 찬 버퍼를 반환합니다.
다른 파일과 마찬가지로 시스템은 스파스 파일의 모든 위치에서 데이터를 쓰거나 데이터를 읽을 수 있습니다. 이전에 파일의 0이 아닌 부분에 기록되는 0이 아닌 데이터는 디스크 공간을 할당할 수 있습니다. 0이 아닌 데이터(FSCTL_SET_ZERO_DATA사용)에 대해 기록되는 0은 디스크 공간의 할당을 취소할 수 있습니다.
메모
FSCTL_SET_ZERO_DATA사용하여 0을 작성하여 스파스를 유지하는 것은 애플리케이션에 달려 있습니다.
NTFS 파일 시스템에서 압축된 파일을 처리하는 조각 모음 도구는 NTFS 파일 시스템 볼륨에서 스파스 파일을 올바르게 처리합니다. 크고 조각화된 스파스 파일은 사용 가능한 공간이 사용되기 전에 디스크 익스텐트의 NTFS 제한을 초과할 수 있습니다.