我需要确定 Windows CE 设备上有多少可用空间,以有条件地确定是否应继续执行特定操作。
我认为肯布兰科在这里的回答(与上面的例子有惊人的相似之处)会起作用,我将其改编为:
internal static bool EnoughStorageSpace(long spaceNeeded)
{
DriveInfo[] allDrives = DriveInfo.GetDrives();
long freeSpace = 0;
foreach (DriveInfo di in allDrives)
{
if (di.IsReady)
{
freeSpace = di.AvailableFreeSpace;
}
}
return freeSpace >= spaceNeeded;
}
...但是DriveInfo在我的 Windows CE/紧凑框架项目中不可用。
我正在引用 mscorlib,并且正在使用 System.IO,但由于 DriveInfo 在我的编辑器中比堪萨斯城酋长队的球衣更红,我认为它对我不可用。
有没有其他方法可以完成同样的事情?
更新
我改编了这个:
[DllImport("coredll.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetDiskFreeSpaceEx(string lpDirectoryName,
out ulong lpFreeBytesAvailable,
out ulong lpTotalNumberOfBytes,
out ulong lpTotalNumberOfFreeBytes);
public static bool EnoughStorageSpace(ulong freespaceNeeded)
{
String folderName = "C:\\";
ulong freespace = 0;
if (string.IsNullOrEmpty(folderName))
{
throw new ArgumentNullException("folderName");
}
ulong free, dummy1, dummy2;
if (GetDiskFreeSpaceEx(folderName, out free, out dummy1, out dummy2))
{
freespace = free;
}
return freespace >= freespaceNeeded;
}
...从这里编译,但我不知道 Windows CE 设备的“文件夹名称”应该是什么;在 Windows 资源管理器中,它根本没有名称。我确定我现在所拥有的(“C:\”)是不正确的......
更新 2
根据此处的“Windows 程序员” :“如果您运行的是 Windows CE,则 \ 是根目录”
那么,我应该使用:
String folderName = "\";
...还是我需要逃避它:
String folderName = "\\";
...或者...???