使用C#获取Windows Mobile手机驱动器的大小(免费,总计)

时间:2009-01-03 14:04:18

标签: c# windows-mobile compact-framework

如何使用C#获取Windows Mobile手机上任何硬盘的大小(免费,总计)?

我需要在设备上运行代码(而不是在连接的PC上)执行此操作。

2 个答案:

答案 0 :(得分:5)

我根据对这个问题的更好理解重写了答案,但是对于那些发现这个问题的人,我没有丢失任何原始答案。

从设备上运行的代码中获取大小

答案很简单:直接调用GetDiskFreeSpaceEx example here}或使用third-party library does it for you。{/ p>

我也要编辑这篇文章,看起来我的假设是正确的 - 如果你需要,可以改为阅读。

您有P / Invoke定义。这只是一个静态方法调用。你把它放在课堂上。像这样:

public class MyClass
{
  [DllImport("coredll.dll", SetLastError=true, CharSet=CharSet.Auto)]
  [return: MarshalAs(UnmanagedType.Bool)]
  internal static extern bool GetDiskFreeSpaceEx(string lpDirectoryName,
    out ulong lpFreeBytesAvailable,
    out ulong lpTotalNumberOfBytes,
    out ulong lpTotalNumberOfFreeBytes);
}

然后你打电话给它(不知道你想要用你所有的编组工作做什么):

ulong GetDiskSize(string volumeName)
{
  ulong avail;
  ulong total;
  ulong totalfree;

  MyClass.GetDiskFreeSpaceEx(volumeName, out avail, out total, out totalFree);

  return total;
  // return others as desired
}

然后使用它就像这样:

ulong diskSize = GetDiskSize("\\Storage Card");

从PC上运行的代码中获取大小

虽然设备在资源管理器中显示为“驱动器”,但它不是驱动器。 shell扩展用于使其显示在资源管理器中。您不能在框架中或通过P / Invoke使用任何驱动器API来获取有关设备的信息。

如果您需要获取有关通过ActiveSync(XP及更早版本)或WMDC(Vista)连接的设备的信息,那么您 可以使用Remote API或RAPI。特定的API是CeGetStoreInformation,但您必须先进行一些初始化才能调用它。

RAPI有点过于复杂,无法在这里得到答案,但在网上有很好的记录,并且有一个ready-made managed wrapper for it (free and open source) here。您在该库中的特定电话是RAPI.GetDeviceStoreInformation

答案 1 :(得分:1)

假设手机的驱动器在Windows中作为常规卷安装(即,它在Windows资源管理器中有驱动器号),您可以使用System.IO.DriveInfo类获取此信息。

接下来的问题当然是确定要使用哪个驱动器号,因为手机插入的每台PC都会有所不同。

有两种选择:

  • 扫描系统上所有可用的驱动器,以获取保证存在于手机上的特殊文件。 Environment.GetLogicalDrives将为您提供系统上所有可用驱动器的列表;其中一些可能是可移动的或以其他方式无法访问,但在扫描过程中可能会产生一些不良副作用......
  • 更高级的方法是枚举所有可用的USB设备,并使用其制造商/设备ID查找您的手机。虽然写的目的略有不同,this CodeProject article应该指出正确的方向......

如果你想直接在手机上运行你的代码,而不是连接到PC上的代码(你的问题没有详细说明......),this StackOverflow question显示了如何获得自由空间有关紧凑框架的信息。

编辑,响应详细说明“当我使用DriveInfo并给它驱动器符号时,它给出了本地驱动器的大小”我的C:驱动器“而不是C驱动器存在于移动设备“:电话的C:驱动器将在其安装的PC上有不同的驱动器号(例如,F :) - 因此我的答案部分涉及找到正确的驱动器号。当然,这确实假设您的手机驱动器在主机PC上完全可用:根据手机型号,这可能是也可能不是。如果没有,在手机上运行一些代码是获取此信息的唯一可行解决方案......