Как я могу определить объем свободного места на CD-ROM? - PullRequest
0 голосов
/ 01 апреля 2009

Я пытаюсь определить объем свободного места на диске, используя следующий код:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_LogicalDisk WHERE DriveType =5");
foreach(ManagementObject mo in searcher.Get())
{
    Console.WriteLine( "FreeSpace: "+mo["FreeSpace"].ToString());
    Console.WriteLine("CapacitySpace: " + mo["Size"].ToString());
    UInt64 usedspace = (UInt64)mo["Size"] - (UInt64)mo["FreeSpace"];
    Console.WriteLine("UsedSpace: " + usedspace.ToString());
}

Запустив вышеуказанный код, я получаю следующий вывод:

Свободное пространство: 0
CapacitySpace: 301463552
Используемое пространство: 301463552

В идеале я хотел бы сообщить статистику Windows Explorer - XXX из YYY бесплатно. Обратите внимание, что Windows Explorer сообщает о 392 МБ, свободных от 702 МБ. Спасибо!

Обновление (1 апреля 09): Похоже, что возможность определения свободного места на компакт-диске находится за пределами WMI и зависит от файловой системы вставленного диска. Мои тесты показывают, что Windows не будет отображать информацию о емкости для компакт-дисков в формате CDFS; однако он будет отображать информацию о емкости для компакт-дисков в формате UDF.

Также я нашел отличную встроенную утилиту для просмотра WMI, на которую ссылается здесь .

Ответы [ 2 ]

0 голосов
/ 01 апреля 2009

Пытаетесь ли вы определить количество неиспользуемого пространства из теоретического максимума, доступного для компакт-диска?

Насколько я понимаю, CD-ROM предназначен только для чтения и поэтому никогда не будет свободного места. Каждый бит используется для уже записанных данных, в него больше нельзя записывать, поэтому свободного места никогда не будет.

Если вы просто хотите узнать неписаное пространство в ПЗУ, просто вычтите использованное пространство из фиксированного теоретического максимума (702 МБ?), И вот оно у вас. Фиксированный максимум должен быть частью спецификации где-то.


Рассматривали ли вы использование mciSendString () на устройстве, возможно со строками «info» или «status», для получения дополнительной информации о диске в приводе? Я сам не пробовал, поэтому не уверен, что это сработает.

0 голосов
/ 01 апреля 2009

Что такое тип объекта ManagementObject mo? Потому что если mo ["Size"] хранит только int32, то приведение к int64 ничего не даст.

...