Книга: Программирование на языке 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.

Оглавление книги


Генерация: 1.100. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз