稀疏文件是
文件系统支持的一项功能。按照维基百科的定义,
文件系统负责“控制数据的存取”。硬盘里面只是一大堆0和1,有了文件系统才有
文件、文件夹等我们熟知的这些概念。
稀疏文件是指
绝大部分区域都是0的文件。这样的文件只有一小部分是有数据的,好比一个一万行的txt文件里只有一行字。为了存储这样的文件,如果完整地保存所有字节,显然很浪费空间。Windows常用的
NTFS文件系统支持稀疏文件。将一个文件标记为稀疏后,将只会为
非零的部分分配实际的存储空间。
下面我们使用C/C++语言创建一个稀疏文件。
- #include <Windows.h>
- int main() {
- //创建一个名为sparse.bin的文件
- HANDLE hFile = CreateFileW(L"sparse.bin", GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, NULL, NULL);
- if (hFile != INVALID_HANDLE_VALUE) {
- DWORD result;
- //告诉文件系统驱动,这个文件是稀疏的
- DeviceIoControl(hFile, FSCTL_SET_SPARSE, NULL, 0, NULL, 0, &result, NULL);
- LARGE_INTEGER size;
- ULONGLONG K = 1024;
- //令size为16TB-64KB(这是我的系统上最大的单个文件尺寸)
- size.QuadPart = K*K*K*K * 16 - K * 64;
- //设置文件指针位置到size
- SetFilePointerEx(hFile, size, NULL, FILE_BEGIN);
- //将文件结尾设置为当前位置
- SetEndOfFile(hFile);
- //关闭文件
- CloseHandle(hFile);
- }
- }
复制代码编译运行以后,会在当前目录创建一个接近16TB的文件,就像这样
[查看图片]
专治各类硬盘壕,有木有!
即使你的硬盘可用空间不足16TB也没有关系,由于我并没有写入任何实际数据,只是告诉文件系统,我有一个16TB大的文件。右键打开属性对话框,会发现文件大小为17592185978880字节,占用空间为0字节。虽然不会实际占用硬盘空间,但是在统计文件夹大小的时候会算进去的。如果弄出64个文件,你就有了一个“1PB”的文件夹(1PB=1024TB)