Вы можете достичь этого, используя API IMAPI v2.
Как только у вас есть правильные ссылки в вашем проекте .NET, а также различные перечисления, определенные в этом API (и их довольно много!), Код относительно прост. Нечто подобное (псевдо-код):
IDiscRecorder2 discRecorder = (IDiscRecorder2)[*cd/dvd drive*];
discFormatData.Recorder = discRecorder;
IMAPI_MEDIA_PHYSICAL_TYPE mediaType = discFormatData.CurrentPhysicalMediaType;
string mediaTypeString = GetMediaTypeString(mediaType);
where:
IMAPI_MEDIA_PHYSICAL_TYPE is an enum such like:
public enum IMAPI_MEDIA_PHYSICAL_TYPE
{
IMAPI_MEDIA_TYPE_UNKNOWN = 0,
IMAPI_MEDIA_TYPE_CDROM = 1,
IMAPI_MEDIA_TYPE_CDR = 2,
IMAPI_MEDIA_TYPE_CDRW = 3,
IMAPI_MEDIA_TYPE_DVDROM = 4,
IMAPI_MEDIA_TYPE_DVDRAM = 5,
[not the complete enum...snipped for brevity!]
}
and the "GetMediaTypeString" function simply gives a friendly string
representation of the enum name.
Там хорошая статья и пример проекта на веб-сайте CodeProject, который демонстрирует это достаточно полно:
Burning and Erasing CD/DVD/Blu-ray Media with C# and IMAPI2
Этот проект содержит гораздо больше, чем просто обнаружения (следовательно, название!), но содержит код для эффективного определения типа носителя до записи/стирания носителя.
Из статьи:
Определение типа медиа
Для определения типа носителя и свободного места на жестком диске, вы создаете объект MsftDiscFormat2Data и установить текущий регистратор в свойстве Recorder , Затем вы можете получить тип носителя из свойства IDiscFormat2Data CurrentPhysicalMediaType.
Как только у вас есть тип носителя, создайте объект MsftFileSystemImage и вызовите метод ChooseImageDefaultsForMediaType с типом носителя.