使用Ruby

时间:2015-05-22 14:47:05

标签: ruby-on-rails ruby

在Rails应用程序中,我正在使用以下内容读取网络位置上的文件:

Dir.chdir('\\server\share')
Dir.glob('**/*.txt').each do |f|
    ....
end

我想使用Ruby在这个目录(Windows PC)上找到可用的磁盘空间。

要查找本地磁盘上的可用字节,我之前使用过sys-filesystem gem:

require 'sys/filesystem'

stat = Sys::Filesystem.stat("C:\\")
bytes = stat.block_size * stat.blocks_available

我只能获得sys-filesystem来返回本地磁盘或已安装的网络路径的信息。网络位置的格式为\\server\share

有人可以提出替代方案吗?

1 个答案:

答案 0 :(得分:0)

根据lurker的建议,Windows API可以返回可用磁盘空间:

require "Win32API"  

GetDiskFreeSpaceEx = Win32API.new("kernel32", "GetDiskFreeSpaceEx",
['p','p','p','p'], 'i')

def get_disk_free_space(path)
    free_caller = " " * 8
    total = " " * 8
    free = " " * 8
    GetDiskFreeSpaceEx.call(path, free_caller, total, free)
    l,h = free_caller.unpack("II")
    l + (h << 32)
end

path = "\\\\server\\share\\"
puts "#{get_disk_free_space(path)} bytes"
puts "#{(get_disk_free_space(path)/1073741824.0).round(2)} GB"

确保路径具有尾部反斜杠。