我正在尝试获取连接的USB闪存驱动器的物理设备大小。我曾尝试使用WMI。正确获取磁盘大小
ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Model = '" + cmbHdd.SelectedItem + "'");
foreach (ManagementObject moDisk in mosDisks.Get())
{
lblCapacity.Text = "Capacity: " + moDisk["Size"];
}
我一直在使用进口来获取几何尝试:
var geo = new DiskGeometry();
uint returnedBytes;
DeviceIoControl(Handle, 0x70000, IntPtr.Zero, 0, ref geo, (uint)Marshal.SizeOf(typeof(DiskGeometry)), out returnedBytes, IntPtr.Zero);
return geo.DiskSize;
他们都做返回一个值..但它是不正确的。
例如,上面的代码返回250056737280. 当我转储整个二进制内容到一个新的文件,FileStream.Length返回250059350015
见的最后一个选项是如何做大?这也是我需要让我的代码按预期工作的正确大小。但我无法转储250GB的数据来获得完整的大小。 那么有没有另一种方法来获得适当的尺寸?
有趣。我在哪里可以找到那些枚举作为整数,所以我可以把正确的价值? – Eaton 2010-10-24 14:36:24
常量在WinIoCtl.h中定义。 IOCTL_DISK_GET_LENGTH_INFO的值是0x0007405c – 2010-10-24 14:49:59
谢谢,我会尽快尝试并让您知道我的结果。 – Eaton 2010-10-25 23:05:31