Отримання відомостей про диски
При записі файлу на диск (особливо якщо це змінний носій - дискета чи флешка) бажано спочатку перевірити, а чи вистачить вільного місця? Для цього призначені функції DiskFree (n) і DiskSize (n). Перша повертає обсяг вільного місця на диску в кілобайтах, друга - загальний розмір диска в кілобайтах. Функції повертають "дуже довге" 64-бітове ціле число типу INT64. Параметр n - ціле число, яким кодується диск: 0 - поточний диск, 1 - дисковод А. 3 - диск С: і т.д. Наприклад, можна вивести інформацію про диск:
ffFixed, 10,2) + 'Гб, вільно' +
FloatTostrF (DiskFree (d) / 1073741824, ffFixed, 10,2) + 'Гб'
На вхід функції FreeSpace подається ім'я диска як текстовий рядок, скажімо, 'D: \'. Для перетворення текстового імені диска в його порядковий номер використовується наступний прийом: обчислюється код букви диска ORD (d [1]) і з нього віднімається код букви А. Якщо ім'я диска A: \, то після вирахування отримаємо 0, С: \ - отримаємо двійку і т.д. А якщо до цієї різниці додати одиницю, то диску A: \ відповідатиме 1, диску B: \ - 2 ... що і потрібно. Константа 1073741824 = 1024 3 служить для перекладу кілобайт в гігабайти.
А як дізнатися, які взагалі логічні диски в системі? Простіше простого:
IF DirectoryExists (c + ': \') THEN
Виконуємо цикл по всіх можливих імен дисків від C: до Z. Дисководи не чіпаємо, щоб не лякати користувача. Якщо шлях до чергового диску знайдений, записуємо ім'я диска в динамічний масив текстових рядків. Наприклад, за допомогою такої функції можна вивести список дисків в компонент TComboBox:
procedure TForm1.Button1Click (Sender: TObject);
А як визначити, з чим ми маємо справу - з дисководом, вінчестером, мережевим диском? Для цього призначена функція GetDriveType, вбудована в API-функції Windows. Розглянемо приклад:
CASE GetDriveType (PCHAR (s)) OF
1: Result: = 'Немає диска';
DRIVE_REMOVABLE: Result: = 'Дисковод або Flash';
DRIVE_FIXED: Result: = 'Жорсткий диск';
DRIVE_REMOTE: Result: = 'Cетевой диск';
DRIVE_RAMDISK: Result: = 'Віртуальний диск'
Result: = 'Не можу визначити'
Так як всі функції API Windows працюють з покажчиками на текстові рядки, звичайну паскалевская рядок типу STRING доводиться перетворювати в покажчик за допомогою операції PCHAR.