2015-05-22 67 views
1

在一個Rails應用程序我正在使用的網絡位置讀取文件的網絡位置的可用磁盤空間如下:查找使用Ruby

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

我想找到這個目錄中的可用磁盤空間(一Windows PC)使用Ruby。

要找到一個本地磁盤上可用的字節我以前用過的sys-filesystem寶石:

require 'sys/filesystem' 

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

我只能得到SYS文件系統返回給本地磁盤或安裝的網絡路徑的信息。網絡位置的格式是\\server\share

任何人都可以提出一個替代方案嗎?

+2

您可以使用Windows API [GetDiskFreeSpaceEx](https://msdn.microsoft.com/en-us/library/windows/desktop/aa364937%28v=vs.85%29.aspx)和[call它來自Ruby](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/95347)。 GetDiskFreeSpaceEx接受UNC路徑。您也可以檢查您使用的寶石是否支持此功能。 – lurker

回答

0

至於建議的潛伏者,在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" 

確保路徑有一個斜槓。