怎样用一个循环来计算整个个硬盘的大小,内详?该如何解决
怎样用一个循环来计算整个个硬盘的大小,内详?
GetDiskFreeSpaceEx(PChar(driver+ ':\ '),userFreeBytes,totalBytes,@freeBytes);
我只能用这个来得到单个分区的大小,我想得到的是整个硬盘的大小,在哪看过一个 for循环来着,但当时没记下来,现在用到了也找不到了,高手给个帮助,,,,
------解决方案--------------------
function GetDrives: string;
var
DiskType: Word;
D: Char;
Str: string;
i: Integer;
begin
for i := 0 to 25 do
begin
D := Chr(i + 65);
Str := D + ': ';
DiskType := GetDriveType(PChar(Str));
//得到本地磁盘和网络盘
if (DiskType = DRIVE_FIXED) or (DiskType = DRIVE_REMOTE) then
begin
GetDiskFreeSpaceEx(PChar(D+ '\ '),userFreeBytes,totalBytes,@freeBytes);
//sum(userFreeBytes),sum(totalBytes),sum(freeBytes)
end;
end;
end;
------解决方案--------------------
Sum1 跟 Sum2要初始化为 0
procedure TForm1.Button1Click(Sender: TObject);
var
d,dr:Char;
DiskType:Word;
Str:String;
i:Integer;
sum1,sum2,userFreeBytes,totalBytes,freeBytes:Int64;
begin
sum1:=0;
sum2:=0;
for i:= 0 to 25 do
begin
d:=Chr(i+65);
Str:= 'd ';
DiskType:=GetDriveType(pChar(d+ ':\ '));
if(DiskType = DRIVE_FIXED) or (DiskType = DRIVE_REMOTE) then
begin
GetDiskFreeSpaceEx(pChar(d+ ':\ '),userFreeBytes,totalBytes,@freeBytes);
sum1:= sum1+totalBytes;
sum2:= sum2+freeBytes;
end;
end;
Edit1.Text:=Formatfloat( '###,##0 ',(((sum1)div 1000)div 1000)div 1000)+ 'G ';
Edit2.Text:=Formatfloat( '###,##0 ',(((sum2)div 1000)div 1000)div 1000)+ 'G ';
end;
GetDiskFreeSpaceEx(PChar(driver+ ':\ '),userFreeBytes,totalBytes,@freeBytes);
我只能用这个来得到单个分区的大小,我想得到的是整个硬盘的大小,在哪看过一个 for循环来着,但当时没记下来,现在用到了也找不到了,高手给个帮助,,,,
------解决方案--------------------
function GetDrives: string;
var
DiskType: Word;
D: Char;
Str: string;
i: Integer;
begin
for i := 0 to 25 do
begin
D := Chr(i + 65);
Str := D + ': ';
DiskType := GetDriveType(PChar(Str));
//得到本地磁盘和网络盘
if (DiskType = DRIVE_FIXED) or (DiskType = DRIVE_REMOTE) then
begin
GetDiskFreeSpaceEx(PChar(D+ '\ '),userFreeBytes,totalBytes,@freeBytes);
//sum(userFreeBytes),sum(totalBytes),sum(freeBytes)
end;
end;
end;
------解决方案--------------------
Sum1 跟 Sum2要初始化为 0
procedure TForm1.Button1Click(Sender: TObject);
var
d,dr:Char;
DiskType:Word;
Str:String;
i:Integer;
sum1,sum2,userFreeBytes,totalBytes,freeBytes:Int64;
begin
sum1:=0;
sum2:=0;
for i:= 0 to 25 do
begin
d:=Chr(i+65);
Str:= 'd ';
DiskType:=GetDriveType(pChar(d+ ':\ '));
if(DiskType = DRIVE_FIXED) or (DiskType = DRIVE_REMOTE) then
begin
GetDiskFreeSpaceEx(pChar(d+ ':\ '),userFreeBytes,totalBytes,@freeBytes);
sum1:= sum1+totalBytes;
sum2:= sum2+freeBytes;
end;
end;
Edit1.Text:=Formatfloat( '###,##0 ',(((sum1)div 1000)div 1000)div 1000)+ 'G ';
Edit2.Text:=Formatfloat( '###,##0 ',(((sum2)div 1000)div 1000)div 1000)+ 'G ';
end;