特定の操作を続行するかどうかを条件付きで判断するために、Windows CE デバイスの空き容量を判断する必要があります。
ここでのケン・ブランコの答え( yonderの例と非常によく似ています)がうまくいくと思いました。
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;
}
...from here、これはコンパイルされますが、Windows CE デバイスの "folderName" がどうあるべきかわかりません。Windows エクスプローラーでは、名前がまったくありません。私が今持っているもの(「C:\」)は正しくないと確信しています...
更新 2
ここの「Windowsプログラマー」によると:「Windows CEを実行している場合、\はルートディレクトリです」
だから、私は使用する必要があります:
String folderName = "\";
...またはエスケープする必要がありますか:
String folderName = "\\";
...また...???