getCotalSpace()与UNC

时间:2016-01-27 20:02:54

标签: java java-io

我正在尝试通过UNC从Windows主机在NAS共享上使用File.getTotalSpace()File.getFreeSpace()

由于NAS中的各种链接,根据请求的特定目录,空闲/总空间将有所不同。

例如,在DOS框中:

dir \\nas\level1

可能会返回12,234,567个字节,但是:

dir \\nas\level1\level2\level3

返回987,654,321字节免费。

我试试:

new File("\\\\nas\\level1\\level2\\level3").getFreeSpace();

但这会返回12,234,567。似乎getFreeSpace()getTotalSpace()正在从路径的根目录(在本例中为\\ nas)检索报告的空间,而不是从我请求的级别检索。

如果我将该UNC路径映射到驱动器号,例如:

net use s: \\nas\level1\level2\level3

然后

new File("s:").getFreeSpace();

将返回正确的值。但我必须遍历一堆UNC路径,因此将它们全部映射是不可行的。

那么如何从我要求的特定目录级别获取基于UNC的共享的空闲/总空间?

1 个答案:

答案 0 :(得分:0)

我假设您从Windows资源管理器获得了预期的空间使用/空间可用值。

如果是这样,您还应该能够以编程方式从WMI获取这些相同的值。

建议:

  1. 使用Java::WMI library or wrapper之类的jWMI

  2. 编写一个简单的VBScript或PowerShell脚本,然后编写call your script from Java

  3. 以下是一个简单的PowerShell(.ps1)示例,来自上面的链接:

    $disk = Get-WmiObject Win32_LogicalDisk -ComputerName remotecomputer -Filter "DeviceID='C:'" |
    Foreach-Object {$_.Size,$_.FreeSpace}
    

    这是另一个例子:

    https://superuser.com/questions/911534/determine-the-size-of-a-network-folder

    $startFolder = "\\pmintl.net\rbsdata\SPA_BB01"
    
    $colItems = (Get-ChildItem $startFolder | Measure-Object -property length -sum)
    "$startFolder -- " + "{0:N2}" -f ($colItems.sum / 1MB) + " MB"
    
    $colItems = (Get-ChildItem $startFolder -recurse | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object)
    foreach ($i in $colItems)
        {
            $subFolderItems = (Get-ChildItem $i.FullName | Measure-Object -property length -sum)
            $i.FullName + " -- " + "{0:N2}" -f ($subFolderItems.sum / 1MB) + " MB"
        }