我正在尝试获取连接的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的数据。
那么还有另一种方法来获得合适的尺寸吗?
最佳答案
您可以考虑使用DevideIoControl尝试IOCTL_DISK_GET_LENGTH_INFO。
关于c# - 正确获取磁盘大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4008620/