Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么磁盘上的文件大小不同?_C#_.net_Winapi_Operating System_File Management - Fatal编程技术网

C# 为什么磁盘上的文件大小不同?

C# 为什么磁盘上的文件大小不同?,c#,.net,winapi,operating-system,file-management,C#,.net,Winapi,Operating System,File Management,当我们在任何文件管理软件(如Windows资源管理器)中查看文件大小时,我们会看到两种不同的大小,一种只读取大小,另一种读取磁盘上的大小 为什么这两个不同 磁盘上的大小是否包括一些开销,例如文件分配表FAT中的条目?你能详细说明一下吗 当我们以编程方式查询文件大小时,它总是返回与磁盘大小无关的大小。这个号码是从哪里来的?操作系统必须读取整个文件的内容才能确定此大小,还是只需查找文件分配表 在超级用户上找到。 他说: 我们知道磁盘是由磁道和扇区组成的。在Windows中,这意味着操作系统为集群或分

当我们在任何文件管理软件(如Windows资源管理器)中查看文件大小时,我们会看到两种不同的大小,一种只读取大小,另一种读取磁盘上的大小

为什么这两个不同

磁盘上的大小是否包括一些开销,例如文件分配表FAT中的条目?你能详细说明一下吗

当我们以编程方式查询文件大小时,它总是返回与磁盘大小无关的大小。这个号码是从哪里来的?操作系统必须读取整个文件的内容才能确定此大小,还是只需查找文件分配表

在超级用户上找到。 他说:

我们知道磁盘是由磁道和扇区组成的。在Windows中,这意味着操作系统为集群或分配单元中的文件分配空间

集群的大小可能会有所不同,但典型的范围是512字节到32K或更多。例如,在我的C:\驱动器上,分配单位是4096字节。这意味着Windows将为长度为1到4096字节的任何文件或文件部分分配4096字节

如果我有一个17KB的文件,那么磁盘上的大小将是20.48KB或20480字节。计算结果为4096 1个分配单元x 5=20480字节。保存一个17KB的文件需要5个分配单元

另一个例子是,如果我有一个2000字节大小的文件。磁盘上的文件大小为4096字节。原因是,尽管整个文件可以放在一个分配单元内,但它仍然会占用4096的空间。磁盘上的一个分配单元只有一个文件可以使用一个分配单元,并且不能与其他文件共享

因此,磁盘上的大小是保存文件的所有扇区的空间。这意味着,通常磁盘上的大小总是大于实际大小

因此,在查看“属性”窗口时,文件或文件夹的实际大小应始终取自“大小”值


可能重复:尽管你的问题包含代码,但它的核心本质是关于计算机而不是编程。因此,它更适合作为替代品。谢谢。我已经阅读了关于超级用户的答案,它满足了我好奇心的第一点。请将此问题保持原样,以便有人回答第2部分?对于第2部分,逻辑文件大小和其他几个属性与文件系统目录表中的文件分开存储。大小是文件占用的实际数据量,而磁盘上的大小是驱动器上为该文件分配的空间量。正如我所说的,这个问题的关键与编程无关,因此它与so无关。