Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2009, 17:29   #1
buka_14
 
Регистрация: 09.04.2009
Сообщений: 8
По умолчанию Объем жесткого диска

Привет всем. Как на делфи определить объем жесткого диска?
Сколько занято, сколько свободно на нем. Приму любые подсказки.
buka_14 вне форума Ответить с цитированием
Старый 16.04.2009, 20:03   #2
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Сначала тебе нужно получить список дисков компьютера. Вот ф-ия:
Код:
//ф-ия заполняет список буквами логического диска компа
//Возвращает кол-во определенных дисков
{function GetDriveLetters(letters: TStrings):Integer;
var
  buffer: String;
  i, len, start: Integer;
begin
  SetLength(buffer, 110);
  len := GetLogicalDriveStrings(110, PAnsiChar(buffer));
  //Разбираем строку вида 'c:\#0d:\#0...#0#0', ВВозвращаемую ф-ей
  //GetLogicalDriveStrings
  start := 1;
  for i := 2 to len do
    if (buffer[i] = #0) and (start <> i) then
    begin
      //Нашли очередной диск
      letters.Append(Copy(buffer, start, i-start));
      start := i+1;
    end;
  GetDriveLetters := letters.Count;
end;
}
// Составление списка дисков
function GetDriveLetters(letters: TStrings):Integer;
var
  mask: DWORD;
  i: Integer;
  letter: Char;
begin
  //Получаем маску, характеризующую наличие диков
  mask := GetLogicalDrives();
  //Разбираем маску (Определяем значения первых 26 битов)
  i := 1;
  for letter := 'A' to 'Z' do
  begin
    if mask and i <> 0 then
      //Есть диск под текущей буквой
      letters.Append(letter + ':\');
    i := i * 2; //Переходим к след. биту
  end;
  GetDriveLetters := letters.Count;
end;
Извини, что дальше без пояснений(время нет)

Код:
function GetDriveInformation(root: String; var info: DriveInfo):Boolean;
var
  bufDriveName, bufFSNAme: String;
  SN: DWORD;
  maxFileName, fsOptions: Cardinal;
begin
  SetLength(bufDriveName, 101);
  SetLength(bufFSName, 101);
  
  if GetVolumeInformation(PAnsiChar(root), PAnsiChar(bufDriveName), 100,
                       Addr(SN), maxFileName, fsOptions,
                       PAnsiChar(bufFSName), 100) <> FALSE then
  begin
    
    with info do
    begin
      DriveLabel := bufDriveName;
      FileSystemName := bufFSName;
      SerialNumber := SN;
      MaxFileNameLen := maxFileName;
      
      with info.FileSystemOptions do
      begin
        CaseSensitive := fsOptions and FS_CASE_SENSITIVE <> 0;
        SupportCompression := fsOptions and FS_FILE_COMPRESSION <> 0;
        IsCompressed := fsOptions and FS_VOL_IS_COMPRESSED <> 0;
      end;
    end;
    
    GetDriveInformation := True;
  end
  else
    
    GetDriveInformation := False;
end;
Код:
// Ф-ия возвращает полный размер диска в байтах
function GetDriveSize(root: String): Int64;
var
  freeToCaller, totalBytes, freeBytes: Int64;
begin
  if GetDiskFreeSpaceEx(PAnsiChar(root), freeToCaller, totalBytes,
                     PLargeInteger(Addr(freeBytes))) <> FALSE
  then
    GetDriveSize := totalBytes
  else
    GetDriveSize := -1;
end;
Код:
//Ф-ия возвращает размер свободного места на диске
function GetDriveFreeSpace(root: String): Int64;
var
  freeToCaller, totalBytes, freeBytes:Int64;
begin
  if GetDiskFreeSpaceEx(PAnsiChar(root), freeToCaller, totalBytes,
                     PLargeInteger(Addr(freeBytes))) <> FALSE
  then
    GetDriveFreeSpace := freeBytes
  else
    GetDriveFreeSpace := -1;
end;
Дальше тебе нужно определить тип носителя. Ну вот в принципе и все.
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка жесткого диска из консоли Квэнди Софт 4 16.01.2009 15:30
Серийный номер жесткого диска Dj_smart Паскаль, Turbo Pascal, PascalABC.NET 0 04.01.2009 21:19
Обследование жесткого диска! Rembo Компьютерное железо 6 11.08.2008 09:14
симптомы смерти жесткого диска! ronich Помощь студентам 2 09.01.2008 11:29