我正在尝试获取连接的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/

10-13 06:26