我正在尝试通过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的共享的空闲/总空间?
答案 0 :(得分:0)
我假设您从Windows资源管理器获得了预期的空间使用/空间可用值。
如果是这样,您还应该能够以编程方式从WMI获取这些相同的值。
建议:
编写一个简单的VBScript或PowerShell脚本,然后编写call your script from Java。
以下是一个简单的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"
}