//go:build windows package recovery import ( "fmt" "golang.org/x/sys/windows" ) // availableBytesOfFilesystem liefert den freien Platz eines vorhandenen Pfades. // // GetDiskFreeSpaceEx liefert den fuer den aufrufenden Benutzer verfuegbaren // Platz. Er ist der ehrlichere Wert als der gesamte freie: Bei gesetztem // Datentraegerkontingent liegt er darunter — und mehr laesst sich nicht // schreiben. func availableBytesOfFilesystem(existingPath string) (int64, error) { pathPointer, conversionError := windows.UTF16PtrFromString(existingPath) if conversionError != nil { return 0, fmt.Errorf("der pfad %q ist unlesbar: %w", existingPath, conversionError) } var ( freeBytesAvailableToCaller uint64 totalNumberOfBytes uint64 totalNumberOfFreeBytes uint64 ) if apiError := windows.GetDiskFreeSpaceEx(pathPointer, &freeBytesAvailableToCaller, &totalNumberOfBytes, &totalNumberOfFreeBytes); apiError != nil { return 0, apiError } return int64(freeBytesAvailableToCaller), nil }