Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Delphi 2010, WinAPI-функция GetDiskFreeSpaceEx


Автор: grh 2.6.2016, 12:12
Всем привет. У меня такая проблема:
Необходимо вывести информацию о диске C:\ с помощью WinAPI-функции GetDiskFreeSpaceEx. Имеется следующий программный код:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  lpRootPathName:PChar;
  lpFreeBytesAvailable:PLargeInteger;
  lpTotalNumberOfBytes:PLargeInteger;
  lpTotalNumberOfFreeBytes:PLargeInteger;
begin
  new(lpFreeBytesAvailable);
  new(lpTotalNumberOfBytes);
  new(lpTotalNumberOfFreeBytes);
  lpRootPathName:=StringToOleStr('C:\');
  if not Windows.GetDiskFreeSpaceEx(lpRootPathName,lpFreeBytesAvailable,
  lpTotalNumberOfBytes,lpTotalNumberOfFreeBytes) then
  begin
    lpFreeBytesAvailable^:=0;
    lpTotalNumberOfBytes^:=0;
    lpTotalNumberOfFreeBytes^:=0;
  end;
  ShowMessage('Диск С:'+#13#10+
  'lpFreeBytesAvailable = '+inttostr(lpFreeBytesAvailable^)+#13#10+
  'lpTotalNumberOfBytes = '+inttostr(lpTotalNumberOfBytes^)+#13#10+
  'lpTotalNumberOfFreeBytes = '+inttostr(lpTotalNumberOfFreeBytes^))
end;


После запуска программы и нажатия кнопки Button1 на экране появляется сообщение об ошибке:

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 004B3465 in module 'Project1.exe'. Read of address 00000008'.

Как исправить ошибку, подскажите пожалуйста.

Автор: grh 3.6.2016, 12:04
Проблема решена с помощью функций DiskSize, DiskFree.
Код

procedure TForm1.Button1Click(Sender: TObject);
var DS,DF:int64;
begin
  DS:=DiskSize(3);DF:=DiskFree(3);
  ShowMessage('Диск С:'+#13#10+'DiskSize = '+inttostr(DS)+#13#10+
  'DiskFree = '+inttostr(DF))
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)