Java 带有UNC的getTotalSpace()

Java 带有UNC的getTotalSpace(),java,java-io,Java,Java Io,我正试图通过UNC从Windows主机在NAS共享上使用File.getTotalSpace()和File.getFreeSpace() 由于NAS中存在各种链路,可用/总空间将根据请求的特定目录而有所不同 例如,在DOS框中: dir \\nas\level1 可能会返回12234567个可用字节,但: dir \\nas\level1\level2\level3 返回987654321个可用字节 我尝试: new File("\\\\nas\\level1\\level2\\level3

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

由于NAS中存在各种链路,可用/总空间将根据请求的特定目录而有所不同

例如,在DOS框中:

dir \\nas\level1
可能会返回12234567个可用字节,但:

dir \\nas\level1\level2\level3
返回987654321个可用字节

我尝试:

new File("\\\\nas\\level1\\level2\\level3").getFreeSpace();
但这返回12234567。似乎
getFreeSpace()
getTotalSpace()
正在从路径的根(\\nas,在本例中)而不是从请求的级别检索报告的空间

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

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

将返回正确的值。但是我必须遍历一组UNC路径,所以映射它们是不可行的


那么,如何从我请求的特定目录级别获取基于UNC的共享的可用/总空间呢?

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

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

建议:

  • 使用一个类似的工具

  • 然后编写一个简单的VBScript或脚本

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

    $disk = Get-WmiObject Win32_LogicalDisk -ComputerName remotecomputer -Filter "DeviceID='C:'" |
    Foreach-Object {$_.Size,$_.FreeSpace}
    
    下面是另一个例子:


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

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

    建议:

  • 使用一个类似的工具

  • 然后编写一个简单的VBScript或脚本

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

    $disk = Get-WmiObject Win32_LogicalDisk -ComputerName remotecomputer -Filter "DeviceID='C:'" |
    Foreach-Object {$_.Size,$_.FreeSpace}
    
    下面是另一个例子:


    建议:试试java.nio。例如,
    Files.getFileStore(path.get(“path to file”).toRealPath()).getUsableSpace()。感谢您的建议,但它产生了相同的结果。建议:尝试java.nio。例如,
    Files.getFileStore(path.get(“path to file”).toRealPath()).getUsableSpace()。感谢您的建议,但它产生了相同的结果。谢谢,我将检查这些选项。上面的第一个脚本似乎只适用于远程计算机上的物理或逻辑设备(驱动器号)。第二种方法似乎可以检索已使用的空间,但不能检索可用空间或总空间。我遗漏了什么吗?谢谢,我会检查这些选项。上面的第一个脚本似乎只适用于远程机器上的物理或逻辑设备(驱动器号)。第二种方法似乎可以检索已使用的空间,但不能检索可用空间或总空间。我错过什么了吗?
    
    $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"
        }