我也问过Linux 的一个兄弟问题。
在 Windows 中(我刚刚测试过):
- 空文件夹的大小为 0 字节
- 空文件的大小为 0 字节
但是,文件和文件夹显然有名称,必须存储在某个地方。
- 它们大概存储在哪里?
- 可用于存储这些数据的最大内存是否是预定义的数字,还是取决于磁盘中的可用空间?
- 名称较短的空文件是否比名称较长的空文件占用更少的空间?(或者存储这些名称的数据结构对每个文件都有固定的字节数,也许用填充剩余的字节
\0
?) - 名称较短的空文件夹是否比名称较长的空文件夹占用的空间更少?
- 一个名为的空文件夹
foobar
比一个名为的空文件占用的空间更少、相同或更多foobar
? - 处的空文件
C:\empty.txt
比 处的空文件占用的空间更少、相同或更多C:\long\nested\path\until\the\empty\file\is\reached\empty.txt
?
答案1
我也问过一个有关 Linux 的兄弟问题。
如果有区别的话,那不是 Windows 和 Linux 之间的区别(你真的会对 macOS、Solaris 等提出同样的问题吗?),而是实际的文件系统用于在磁盘上存储文件。
但是,虽然每个操作系统都有其首选的文件系统,但 Windows 上的 FAT32 仍然与 Linux 上的 FAT32 行为相同;Linux 上的 NTFS 与 Windows 上的 NTFS 工作方式相同;等等。同时,同一操作系统上的各种文件系统可能彼此行为截然不同 - Ext4 和 Btrfs(或 FAT32 和 NTFS)英里即使它们在同一个操作系统上,也会分开。
空文件的大小为 0 字节
在所有情况下,报告的文件大小为总是只是实际内容,而不是元数据。实际上,当今使用的所有文件系统都会将它们视为两个独立的东西——如果您认为文件由其名称和附加在一起的数据组成,不,通常情况并非如此。
文件的名称通常存储在其父目录中(这也允许硬链接,即一个文件有多个名称)。因此长文件名可能会使父目录看起来更大。
其余与文件相关的元数据可能位于名称附近,或者更常见于单独的区域(例如 inode 表)。
可用于存储这些数据的最大内存是否是预定义的数字,还是取决于磁盘中的可用空间?
情况各不相同。每种文件系统都有自己的限制 – 有些有固定的最大值,有些则限制为磁盘的一定百分比,等等。
例如,在 FAT 中,每个目录可以拥有特定数量的“目录条目”(MS-DOS 样式 8.3 文件名每个占用一个条目,但长文件名占用多个条目)。这不适用于 NTFS,尽管两者都在 Windows 上。
在 Ext2/Ext4 中,整个文件系统的“inode”数量有限(每个文件或目录一个),它以固定大小记录列表的形式存储这些记录,并且该区域始终设置为磁盘空间的固定百分比。Ext4 磁盘上 inode 用完的情况并不罕见。这不适用于 XFS 或 Btrfs,它们都使用动态数据结构(通常是 B 树),并且会根据需要增长。
名称较短的空文件夹是否比名称较长的空文件夹占用更少的空间?(或者存储这些名称的数据结构对每个文件都有固定的字节数,也许用 \0 填充剩余的字节?)
它会有所不同。对于某些(大多数?)文件系统,名称的长度是可变的。
对于其他一些文件系统,仅在特定阈值下才会发生。同样,FAT/exFAT 和 UFS 及其固定大小的目录槽就是例子 - 如果一个槽被占用,那么它就被占用了,无论它存储的是使用空字节填充的 1 字节文件名还是 16 字节文件名。
一个名为 foobar 的空文件夹比一个名为 foobar 的空文件占用的空间更少、相同还是更多?
再次强调,这取决于文件系统。
如果我理解正确的话,在 FAT 中它们应该是相同的。在 NTFS 中我有点怀疑文件夹会更大,但目前我只是猜测。
C:\empty.txt 处的空文件比 C:\long\nested\path\until\the\empty\file\is\reached\empty.txt 处的空文件占用的空间更少、相同还是更多?
文件本身,总是相同的,因为文件不知道它的完整路径——操作系统通过向下查找父目录来找到它。这可能适用于所有文件系统。
但是这些文件夹会占用一些非零空间。