Я переписал ответ, основываясь на лучшем понимании вопроса, но не потеряв ни одного моего первоначального ответа для тех, кто нашел этот вопрос.
Получение размера из кода, работающего на устройстве
Ответ прост: P / Invoke GetDiskFreeSpaceEx напрямую ( пример здесь ) или используйте стороннюю библиотеку , которая сделает это за вас .
Я также собираюсь отредактировать сообщение, чтобы оно показалось, что мои предположения верны - измените их, чтобы они читались иначе, если вам нужно.
У вас есть определение 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");
Получение размера из кода, работающего на ПК
Хотя устройство отображается в проводнике как «диск», оно не является диском. Расширение оболочки используется, чтобы оно появилось в Проводнике. Вы не можете использовать любые API-интерфейсы накопителя, в рамках или через P / Invoke, чтобы получить информацию об устройстве.
Если вам нужно получить информацию об устройстве, подключенном через ActiveSync (XP и более ранние версии) или WMDC (Vista), то у вас есть для использования Remote API или RAPI. Конкретным API является CeGetStoreInformation , но вам необходимо выполнить некоторую инициализацию, прежде чем вы сможете его вызвать.
RAPI слишком сложен для того, чтобы в нем можно было найти ответ, но он хорошо документирован в Интернете, и здесь есть готовая управляемая оболочка для него (бесплатный и с открытым исходным кодом) здесь . В этой библиотеке вы выполняете конкретный вызов RAPI.GetDeviceStoreInformation .
.