Windows 中的空文件和文件夹怎么可能占用零字节?

Ped*_*o A 1 windows ntfs disk-space hard-drive filesystems

我还问了一个关于 Linux 的兄弟问题


在 Windows 中(我刚刚测试过):

  • 空文件夹的大小为 0 字节
  • 空文件的大小为 0 字节

然而,文件和文件夹显然有名称,必须存储在某个地方。

  • 它们大致存储在哪里?
  • 可用于存储这些数据的最大内存是预定义的数字还是取决于磁盘中的可用空间?
  • 具有短名称的空文件是否比具有较大名称的空文件占用更少的空间?(或者也许存储这些名称的数据结构对于每个文件都有固定的字节数,这可能会用 填充剩余的字节\0?)
  • 名称短的空文件夹是否比名称大的空文件夹占用的空间更少?
  • 名为 的空文件夹foobar比名为 的空文件占用更少的空间、相同的空间还是更多的空间foobar
  • 空文件 atC:\empty.txt占用的空间比空文件 at 占用的空间更少、相同还是更多C:\long\nested\path\until\the\empty\file\is\reached\empty.txt

use*_*686 5

\n

我还问了一个关于 Linux 的兄弟问题。

\n
\n

如果有的话,差异不在于 Windows 和 Linux 之间(您真的要对 macOS、Solaris 等提出同样的问题吗?),而是用于在磁盘上存储文件的实际文件系统之间。

\n

然而,虽然每个操作系统都有其首选的文件系统,但 Windows 上的 FAT32 的行为仍然与 Linux 上的 FAT32 相同。Linux 上的 NTFS 工作方式与 Windows 上的 NTFS 相同;等等。同时,同一操作系统上的各种文件系统的行为可能彼此非常不同 \xe2\x80\x93 Ext4 和 Btrfs(或 FAT32 和 NTFS)即使位于同一操作系统上也相距数英里。

\n
\n

空文件的大小为 0 字节

\n
\n

在所有情况下,报告的文件大小始终只是实际内容,而不是元数据。实际上,现在使用的所有文件系统都会将它们视为两个独立的东西 \xe2\x80\x93 如果您想象一个文件由其名称和附加在一起的数据组成,不,这通常不是它的完成方式。

\n

文件的名称通常存储在其父目录中(这也允许硬链接,即一个文件具有多个名称)。太长的文件名可能会使父目录看起来更大。

\n

其余与文件相关的元数据可能位于名称附近,或更常见的是位于单独的区域(例如索引节点表)。

\n
\n

可用于存储这些数据的最大内存是预定义的数字还是取决于磁盘中的可用空间?

\n
\n

它有所不同。每种文件系统都有自己的限制\xe2\x80\x93,有些有固定的最大值,有些则限制在磁盘的一定百分比等。

\n

例如,在FAT中,每个目录可以有一定最大数量的“目录条目”(MS-DOS样式8.3文件名每个占据一个条目,但长文件名占据多个条目)。这不适用于 NTFS,尽管两者都在 Windows 上。

\n

在 Ext2/Ext4 中,整个文件系统仅限于一定数量的“inode”(每个文件或目录一个),它存储为固定大小记录列表,并且该区域始终设置为磁盘的固定百分比空间。Ext4 磁盘上的 inode 耗尽的情况并非闻所未闻。这不适用于 XFS 或 Btrfs,它们都使用动态数据结构(通常是 B 树)并且只会按需增长。

\n
\n

名称短的空文件夹是否比名称大的空文件夹占用的空间更少?(或者也许存储这些名称的数据结构对于每个文件都有固定的字节数,这可能用 \\0 填充剩余的字节?)

\n
\n

它有所不同。对于某些(大多数?)文件系统,是的,名称是可变长度的。

\n

对于某些其他文件系统,仅在特定阈值下。同样,FAT/exFAT 和 UFS 及其固定大小的目录槽就是 \xe2\x80\x93 的例子,如果一个槽被占用,那么它就被占用,无论它存储的是用空字节填充的 1 字节文件名还是 16 字节文件名。字节一。

\n
\n

名为 foobar 的空文件夹比名为 foobar 的空文件占用更少的空间、相同的空间还是更多的空间?

\n
\n

同样,这取决于文件系统。

\n

在FAT中,如果我理解正确的话,它们是相同的。在 NTFS 中,我有点怀疑文件夹会更大,但目前我只是猜测。

\n
\n

C:\\empty.txt 中的空文件比 C:\\long\\nested\\path\\until\\the\\empty\\file\ 中的空文件占用更少的空间、相同的空间还是更多的空间\is\\reached\\empty.txt?

\n
\n

文件本身始终相同,因为文件不知道其整个路径 \xe2\x80\x93 ,操作系统通过向下查找父目录来找到它。这可能是所有文件系统通用的。

\n

不过,这些文件夹会占用一些非零空间。

\n