稀疏文件操作

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