Spaces:
Runtime error
Runtime error
| //go:build windows | |
| package common | |
| import ( | |
| "os" | |
| "syscall" | |
| "unsafe" | |
| ) | |
| // GetDiskSpaceInfo 获取缓存目录所在磁盘的空间信息 (Windows) | |
| func GetDiskSpaceInfo() DiskSpaceInfo { | |
| cachePath := GetDiskCachePath() | |
| if cachePath == "" { | |
| cachePath = os.TempDir() | |
| } | |
| info := DiskSpaceInfo{} | |
| kernel32 := syscall.NewLazyDLL("kernel32.dll") | |
| getDiskFreeSpaceEx := kernel32.NewProc("GetDiskFreeSpaceExW") | |
| var freeBytesAvailable, totalBytes, totalFreeBytes uint64 | |
| pathPtr, err := syscall.UTF16PtrFromString(cachePath) | |
| if err != nil { | |
| return info | |
| } | |
| ret, _, _ := getDiskFreeSpaceEx.Call( | |
| uintptr(unsafe.Pointer(pathPtr)), | |
| uintptr(unsafe.Pointer(&freeBytesAvailable)), | |
| uintptr(unsafe.Pointer(&totalBytes)), | |
| uintptr(unsafe.Pointer(&totalFreeBytes)), | |
| ) | |
| if ret == 0 { | |
| return info | |
| } | |
| info.Total = totalBytes | |
| info.Free = freeBytesAvailable | |
| info.Used = totalBytes - totalFreeBytes | |
| if info.Total > 0 { | |
| info.UsedPercent = float64(info.Used) / float64(info.Total) * 100 | |
| } | |
| return info | |
| } | |