【问题标题】:Are 0 bytes files really 0 bytes?0字节文件真的是0字节吗?
【发布时间】:2021-06-13 03:12:30
【问题描述】:

我有一个简单的问题。

当我们创建一个文件时,让我们说“abc.txt”并将其留空。
操作系统会显示文件大小为 0 字节,占用磁盘空间为 0 字节。

如果我们将这些 0 字节文件中的 100 个保存到一个文件夹中,操作系统也会说该文件夹的总大小为 0 字节。

这听起来合乎逻辑,因为文件中没有任何内容。但是这些文件不应该在存储设备中占用至少几个字节吗?

毕竟,我们将它保存在某个地方并为其命名。文件名和可能的其他一些标题不应该至少占用一些空间吗?

【问题讨论】:

  • 是的,它占用了一些空间。操作系统报告的数字是四舍五入的。

标签: language-agnostic filesystems


【解决方案1】:

不,它们仍然占用文件系统上的几个字节。否则我会实现一个神奇的文件系统,它将文件名中编码的所有内容存储在空文件中。


它实际上归结为一个定义问题。 “文件的大小”要么是指文件内容的大小,要么是指它在底层文件系统(即内容大小(四舍五入到最接近的块或簇大小)+ 用于它的字节inode)。

【讨论】:

  • 所以基本上,操作系统对我们隐藏了所有这些信息?
  • 嗯,这取决于你如何看待它。如果您有FAT 或类似名称,则可能是定义问题,文件名、路径等是否是文件本身的一部分。
【解决方案2】:

这些详细信息通常存储在所谓的File Allocation Table(在 Windows FAT 上下文中)中。它们是在我们格式化硬盘时创建的。为其分配了一些预定义的空间。我不认为它的大小会改变。

例如,您格式化一个 100 GB 的硬盘,只有 90+ GB 可供您使用。文件系统使用其他空间来管理/记住保存在硬盘驱动器上的每个文件/文件夹以及保存位置。

【讨论】:

    【解决方案3】:

    这个问题的答案取决于文件系统。

    例如,在 NTFS 上,一个空文件占用一个簇,而一个簇的大小取决于您的硬盘大小。

    Here 你可以读取一些 Windows 文件系统的常见集群大小。

    【讨论】:

      【解决方案4】:

      它们存在于磁盘上的事实意味着已经为它们创建了一条记录,这当然需要一些内存。 0 字节仅对应于文件的逻辑大小,四舍五入到 UI 中显示的粒度,但即便如此,它也可能包含取决于文件格式的文件头。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-13
        • 2012-12-12
        • 2018-12-09
        • 1970-01-01
        相关资源
        最近更新 更多