Мне нужно определить, сколько свободного места есть на устройстве 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 / compact framework.
Я ссылаюсь на mscorlib и использую System.IO, но поскольку DriveInfo в моем редакторе краснее майки Kansas City Chiefs, я считаю, что она мне недоступна.
Есть ли альтернативный способ сделать то же самое?
ОБНОВИТЬ
Я адаптировал это:
[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 = "\\";
...or...???
"\\"
или@"\"
- person ctacke   schedule 16.01.2015