Книга: Программирование на языке Ruby
14.8.4. Вычисление свободного места на диске
14.8.4. Вычисление свободного места на диске
Пусть нужно узнать, сколько байтов свободно на некотором устройстве. В следующем примере это делается по-простому, путем запуска системной утилиты:
def freespace(device=".")
lines = %x(df -k #{device}).split("n")
n = lines.last.split[1].to_i * 1024
end
puts freespace("/tmp") # 16772204544
Эту задачу лучше решать, обернув метод statfs
в расширение Ruby. Такие попытки в прошлом предпринимались, но, похоже, проект умер.
Для Windows имеется несколько более элегантное решение (предложено Дэниэлем Бергером):
require 'Win32API'
GetDiskFreeSpaceEx = Win32API.new('kernel32', 'GetDiskFreeSpaceEx',
'PPPP', 'I')
def freespace(dir=".")
total_bytes = [0].pack('Q')
total_free = [0].pack('Q')
GetDiskFreeSpaceEx.call(dir, 0, total_bytes, total_free)
total_bytes = total_bytes.unpack('Q').first
total_free = total_free.unpack('Q').first
end
puts freespace("С:") # 5340389376
Этот код должен работать во всех вариантах Windows.
- Новая структура данных на диске: ODS11
- Загрузочные дискеты и Live CD для Windows
- Глава 2 Вычисление
- Глава 9 Накопитель на жестком магнитном диске
- Описание работы накопителя на жестком магнитном диске
- Неполадки накопителя на жестком магнитном диске
- На диске появился файл с расширением TMP размером 1 Гбайт. Можно ли его удалять?
- На диске С: не хватает места. Что делать?
- Можно ли убрать всплывающее сообщение Недостаточно места на диске?
- Windows требует вставить установочный компакт-диск, которого у меня нет, но его копия хранится на жестком диске. Как объ...
- На установочном диске Windows много файлов с расширением CAB. Что это за файлы?
- Система сообщает, что на жестком диске мало свободного места. Чтобы освободить жесткий диск, я удалил фильм на 4 Гбайт. ...