稀疏文件作

若要确定文件系统是否支持稀疏文件,请调用 GetVolumeInformation 函数,并检查通过 lpFileSystemFlags 参数返回的 FILE_SUPPORTS_SPARSE_FILES 位标志。

大多数应用程序不知道稀疏文件,也不会创建稀疏文件。 应用程序读取稀疏文件的事实对应用程序是透明的。 请注意稀疏文件的应用程序应确定其数据集是否适合保存在稀疏文件中。 做出该决定后,应用程序必须使用 FSCTL_SET_SPARSE 控制代码显式声明文件为稀疏文件。

应用程序将文件设置为稀疏后,应用程序可以使用 FSCTL_SET_ZERO_DATA 控制代码将文件的区域设置为零。 此外,应用程序还可以使用 FSCTL_QUERY_ALLOCATED_RANGES 控制代码来加速在稀疏文件中搜索非零数据。

执行写入作(除 FSCTL_SET_ZERO_DATA以外的函数或作)时,其数据只包含零,零将写入磁盘,以写入整个写入长度。 若要从文件范围中为零并保持稀疏性,请使用 FSCTL_SET_ZERO_DATA

稀疏感知应用程序还可以将现有文件设置为稀疏。 如果应用程序将现有文件设置为稀疏,则应扫描文件以查找包含零的区域,并使用 FSCTL_SET_ZERO_DATA 重置这些区域,从而可能解除分配某些物理磁盘存储。 升级到稀疏文件感知的应用程序应执行此转换。

从稀疏文件的零出部分执行读取作时,作系统可能无法从硬盘驱动器读取。 相反,系统会识别要读取的文件部分包含零,并且它返回一个缓冲区,该缓冲区满是零,而不会实际从磁盘读取。

与任何其他文件一样,系统可以将数据写入稀疏文件中的任何位置或从任何位置读取数据。 将非零数据写入文件的以前零部分可能会导致磁盘空间分配。 使用非零数据(仅使用 FSCTL_SET_ZERO_DATA)写入零可能会导致磁盘空间解除分配。

注意

应用程序可以通过使用 FSCTL_SET_ZERO_DATA编写零来保持稀疏。

 

在 NTFS 文件系统上处理压缩文件的碎片整理工具将正确处理 NTFS 文件系统卷上的稀疏文件。 使用可用空间之前,大型和高度碎片稀疏文件可能会超过磁盘盘区上的 NTFS 限制。