You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取MediaDevice的MediaStorageInfo?GetStorageInfo无法识别求助

解决MediaDevices获取存储容量与可用空间的问题

你遇到的GetStorageInfo无法解析的问题,核心是手册示例里的这个方法是库自带的扩展方法,需要绑定到具体的设备存储对象上使用,不是凭空调用的。咱们一步步来修正你的代码:

1. 先确认命名空间引用

首先确保代码顶部引入了MediaDevices命名空间——这个扩展方法就藏在这里:

using MediaDevices;

2. 修正代码逻辑:正确的存储信息获取流程

你之前直接实例化MediaStorageInfo是没用的,它必须和设备的实际存储对象绑定。正确的步骤是:

  • 枚举所有媒体设备
  • 连接目标设备(必须走这一步,否则无法访问设备内部信息)
  • 获取设备上的所有存储类功能对象(比如内部存储、SD卡)
  • 对每个存储对象调用扩展方法,拿到有效的MediaStorageInfo

完整的可运行代码示例:

// 枚举系统中所有的媒体设备
var allMediaDevices = MediaDevice.GetDevices();

foreach (var device in allMediaDevices)
{
    device.Connect(); // 必须先连接设备
    try
    {
        // 获取设备上所有的存储功能对象(可能包含内部存储、SD卡等)
        var storageObjects = device.FunctionalObjects(FunctionalCategory.Storage);
        
        foreach (var storageObj in storageObjects)
        {
            // 调用扩展方法GetStorageInfo(),获取当前存储的详细信息
            MediaStorageInfo storageInfo = storageObj.GetStorageInfo();
            
            // 读取总容量和可用空间(单位:字节)
            ulong totalCapacity = storageInfo.Capacity;
            ulong freeSpaceBytes = storageInfo.FreeSpaceInBytes;
            
            // 转成更易读的GB格式
            double totalGB = totalCapacity / (1024.0 * 1024.0 * 1024.0);
            double freeGB = freeSpaceBytes / (1024.0 * 1024.0 * 1024.0);
            
            // 输出信息
            Console.WriteLine($"设备名称:{device.FriendlyName}");
            Console.WriteLine($"存储分区:{storageObj.Name}");
            Console.WriteLine($"总容量:{totalGB:F2} GB");
            Console.WriteLine($"可用空间:{freeGB:F2} GB\n");
        }
    }
    finally
    {
        // 无论是否出错,都要断开连接,避免资源泄漏
        device.Disconnect();
    }
}

3. 为什么你的原代码无法工作?

  • 直接new MediaStorageInfo()得到的是一个空对象,没有绑定任何实际设备的存储,所以读取的容量都是无效值。
  • GetStorageInfo是IMediaObject的扩展方法,必须通过设备返回的存储功能对象来调用,不能单独使用。

额外注意事项

  • 必须调用device.Connect()才能访问设备的内部存储信息,否则会抛出权限或连接异常。
  • 一定要在finally块中执行device.Disconnect(),避免设备长期处于占用状态。
  • 部分设备(比如智能手机)可能有多个存储分区,FunctionalObjects(FunctionalCategory.Storage)会返回多个对象,需要遍历处理。

内容的提问来源于stack exchange,提问作者posh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:12:46