导航

硬盘整数分区计算器和公式

Posted on 2010-08-04 14:57  beeone  阅读(2610)  评论(0编辑  收藏  举报

硬盘整数分区计算器和公式下载,附Win7系统盘整数分区方法

要想吧分区显示为整数,可没有那么简单,下面我就为大家详细分析硬盘分区容量显示之谜:

1. 硬盘厂商为了换算方便,是按照千进制来计算硬盘容量的,一块1TB的硬盘实际容量是1,000,000,000,000Bit=976,562,500KB=953,674MB=931GB左右,分区后实际可用容量会更小;

2. 操作系统实际计算硬盘容量是按照1024进制,由此导致实际可用容量小于标称容量,硬盘容量越大,“损失”的容量也越大;

3. 电脑当中实际显示的分区大小,既不是按照硬盘厂商的设计也不是操作系统的设计,而是另有误差。原因就是硬盘在分区和格式化之后还会在硬盘上占用一定的空间用来存储磁盘结构和数据位置等信息;

4. 对于FAT32分区,每1024字节可用容量会使用4字节用于存储磁盘结构和数据存储位置等信息,但分区中第一GB可用容量却不占用额外的存储容量,因此FAT32整数分区公式为:

应分配MB数=(分区GB数-1)×4+1024×分区GB数

5. 对于NTFS分区,原理更加复杂。NTFS分区的最小容量单位不可能精确到1MB,而是柱面大小。硬盘一般有255磁头,63扇区,故每柱面大小为:512bitx255x63=8225280bit=7.84423828125MB

如果要分10GB,那么应当是10x1024MB=10240MB
实际需要柱面数为10240÷7.84423828125=1305.4
柱面只可能算整数,即1306个柱面
这样实际应分MB数为1306x7.84423828125=10244.575MB
不管小数点后面几位都进1,也就是10245MB,这样系统才能认成是10.0GB了

    上面的计算方法太过复杂,原理大家了解一些就行了,真正操作时如果还用公式+计算器慢慢换算,那就效率太低了。现在已经有人为我们设计了简单方便的硬盘整数分区计算器,支持FAT32和NTFS两种格式:

 
如果是给WIn7分系统盘的话,它会自动预留100MB的隐藏分区,因此在输入分区容量的时候,必须把计算器的数值+100,非系统分区则不需要

 

 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TFrmMain = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    procedure ComboBox1Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmMain: TFrmMain;
  partitionNum  , FactPartitionNum : integer;
  i : integer;

implementation

{$R *.dfm}
{应分配MB数=(分区GB数-1)×4+1024×分区GB数}
function FAT32(Partition : integer):Integer;
var
  j : integer;
begin
  j := (Partition-1)*4+1024*Partition;
  Result := j;
end;
{
如果要分10GB,那么应当是10x1024MB=10240MB
实际需要柱面数为10240÷7.84423828125=1305.4
柱面只可能算整数,即1306个柱面
这样实际应分MB数为1306x7.84423828125=10244.575MB
不管小数点后面几位都进1,也就是10245MB,这样系统才能认成是10.0GB了
应分配MB数 = 取整数位((取整数位(分区GB数*1024/7.84423828125)+1) * 7.84423828125 ) +1
}
function NTFS(Partition : integer):Integer;
var
  k : integer;
begin
  K := trunc((trunc(Partition*1024 / 7.84423828125)+1)* 7.84423828125 ) +1;
  Result := k;
end;

procedure TFrmMain.ComboBox1Change(Sender: TObject);
begin
  if self.ComboBox1.Text = 'FAT32' then
  begin
    i := 1 ;
  end;
  if self.ComboBox1.Text = 'NTFS' then
  begin
    i :=2 ;
  end;

end;

procedure TFrmMain.Button2Click(Sender: TObject);
begin
  if i=1 then
  begin
    Label10.Caption := IntToStr(FAT32(StrToInt(Edit1.Text)));
  end;
  if i=2 then
  begin
    Label10.Caption := IntToStr(NTFS(StrToInt(Edit1.Text)));
  end;
end;

end.