Показать сообщение отдельно
  #7  
Старый 26.09.2007, 22:27
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

Вот, не парься:
Код:
function GetFreeDriveSpace(sDriveLetter, sSizeType: String): Int64;
const
  CharString: String[26] = 'abcdefghijklmnopqrstuvwxyz';

var
  FreeBytesAvailableToCaller: Int64;
  FreeSize:                   Int64;
  TotalSize:                  Int64;
  btCounter:                  Byte;
  bContain:                   Boolean;

begin

  Result := 0;

  sDriveLetter := LowerCase(sDriveLetter);
  SetLength(sDriveLetter,2);
  sDriveLetter[2] := ':';
  bContain := False;
  for btCounter := 0 to 26 do
  begin
    if AnsiStartsText(CharString[btCounter],sDriveLetter) = True then
    begin
      bContain := True;
      Break;
    end;
  end;

  if bContain = False then
  begin
    Result := 0;
    Exit;
  end;

  GetDiskFreeSpaceEx(PChar(sDriveLetter),FreeBytesAvailableToCaller,Totalsize,@FreeSize);

  if LowerCase(sSizeType) = 'b' then
  begin

      Result := FreeBytesAvailableToCaller;

  end
  else if LowerCase(sSizeType) = 'kb' then
  begin

      Result := FreeBytesAvailableToCaller div 1024;

  end
  else if LowerCase(sSizeType) = 'mb' then
  begin

      Result := FreeBytesAvailableToCaller div 1048576;

  end
  else if LowerCase(sSizeType) = 'gb' then
  begin

      Result := FreeBytesAvailableToCaller div 1073741824;

  end
  else if LowerCase(sSizeType) = 'tb' then
  begin

        Result := FreeBytesAvailableToCaller div 1073741824; // написал в 2 строки, т.к. не помню, выйдет ли 
        Result := Result div 1024;                                      // за рамки допустимого число  1099511627776, так сказать, чтобы не рисковать =)

  end;

end;

Набросал на скорую руку (не проверял в делфе), можно сделать оптимизированнее.

PS: в качестве параметра sDriveLetter передавай только букву диска, без двоеточия и слэша, т.е. не C:\ или C:, а просто C.
в качестве параметра sSizeType передавай b,kb,mb,gb,tb - ну соответственно, результатом ф-ии будет размер в байтах, килобайтах, мегабайтах, гигабайтах или террабайтах.
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием