gpt4 book ai didi

Delphi - 枚举 Windows PC 上的磁盘和其他驱动器

转载 作者:行者123 更新时间:2023-12-03 14:56:00 27 4
gpt4 key购买 nike

Possible Duplicate:
Get drive information (free space, etc.) for drives on Windows and populate a memo box

我对编程(尤其是 Delphi)很陌生,并且无法找到任何有关如何枚举 PC 上所有驱动器的示例。

我真的很关心硬盘和 CD-ROM 驱动器,但我一直找不到任何可用的东西。

有人能给我指出一个好的工作示例的方向吗?

最佳答案

最简单的方法实际上是使用 sysutils.pas 文件中的 GetDiskFreeSpaceEx

此示例有 2 个部分。第一个是使用 GetDiskFreeSpaceEX 的重要部分。

function DriveSpace(DriveLetter : String; var FreeSpace, UsedSpace, TotalSpace : int64) : Boolean;
begin
Result := SysUtils.GetDiskFreeSpaceEx(Pchar(DriveLetter), UsedSpace, TotalSpace, @FreeSpace);

if UsedSpace > 0 then
UsedSpace := TotalSpace - FreeSpace;

if not Result then
begin
UsedSpace := 0;
TotalSpace := 0;
FreeSpace := 0;
end;
end;

如果您要请求已知驱动器号的驱动器,例如 C:,那么这就是您所需要的。

用法如下:

var
FS,
US,
TS : Int64
begin
DriveSpace('C:', FS, US, TS);
//Do something with the 3 variables.
end;

话虽如此,如果您也想找到驱动器,您可以使用如下内容:

procedure ListDrivesOfType(DriveType : Integer; var Drives : TStringList);
var
DriveMap,
dMask : DWORD;
dRoot : String;
I : Integer;
begin
dRoot := 'A:\'; //' // work around highlighting
DriveMap := GetLogicalDrives;
dMask := 1;

for I := 0 to 32 do
begin
if (dMask and DriveMap) <> 0 then
if GetDriveType(PChar(dRoot)) = DriveType then
begin
Drives.Add(dRoot[1] + ':');
end;

dMask := dMask shl 1;
Inc(dRoot[1]);
end;
end;

注意 DriveType 整数,应该是以下之一:

DRIVE_UNKNOWN     = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

(我直接从 windows.pas 中取出这些)

<小时/>

现在终于回答您的问题(这非常粗略),以下内容会将所有固定硬盘驱动器的信息添加到备忘录(称为 memo1)中:

Procedure TAform.SomeNameICantThinkOfNow;
const
BytesPerMB = 1048576;
var
MyDrives : TStringlist;
I : Integer;
FreeSpace,
UsedSpace,
TotalSpace : int64;
begin
MyDrives := TStringlist.Create;
ListDrivesOfType(DRIVE_FIXED, MyDrives);

Memo1.Lines.Clear;

for I := 0 to MyDrives.Count - 1 do
begin
FreeSpace := 0;
UsedSpace := 0;
TotalSpace := 0;

if DriveSpace(MyDrives.Strings[I], FreeSpace, UsedSpace, TotalSpace) then
begin
FreeSpace := FreeSpace div BytesPerMB;
UsedSpace := UsedSpace div BytesPerMB;
TotalSpace := TotalSpace div BytesPerMB;

Memo1.Lines.Add('Drive: ' + MyDrives.Strings[I] + ' = Free Space :' + IntToStr(FreeSpace) +
' Used Space: ' + IntToStr(UsedSpace) + ' Total Space: ' + IntToStr(TotalSpace));
end;
end;
end;

我确实说过这会很恶心!我刚刚在 IDE 中运行了它,它可以工作,我已经作为 MB 完成了,但实际上你应该转换为 Double 并选择你的格式(如果作为 MB 进行更精确),因为我上面创建的示例当然只是四舍五入.

希望这能带来一些小小的帮助。

关于Delphi - 枚举 Windows PC 上的磁盘和其他驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5635573/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com