稀疏文件操作

若要确定文件系统是否支持稀疏文件,请调用 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 限制。