【发布时间】:2020-08-06 22:24:14
【问题描述】:
我正在使用这个库来获取可用磁盘空间量:
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetDiskFreeSpaceEx(string lpDirectoryName, out ulong lpFreeBytesAvailable, out ulong lpTotalNumberOfBytes, out ulong lpTotalNumberOfFreeBytes);
我在方法中使用它为:
var result = GetDiskFreeSpaceEx(desiredInstallLocation, out var freeBytesAvailable, out var totalNumberOfBytes, out var totalNumberOfFreeBytes);
然后条件来了:
if (gameSize > (int)freeBytesAvailable)
{
MessageBox.Show($"There is not enough disk space!\nYou need to free at least {ConvertBytesToMegabytes(gameSize - (int)freeBytesAvailable)} MB.", "Not enough space on a disk", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
return false;
}
调试记录如下:
为什么条件通过了?
【问题讨论】:
-
尝试转换为更大的类型,即
if ((long)gameSize > freeBytesAvailable)
标签: c# wpf .net-core kernel marshalling