Свободное место на чистых дисках DVD / Blu-Ray (IMAPI)

Поскольку мой первоначальный вопрос был слишком расплывчатым, позвольте мне уточнить.

Мои цели:

  1. оценить размер чистого диска после выбора файловой системы через IMAPI
  2. оценить место, которое мой файл будет занимать на этом диске, если я его запишу.

Что я хотел бы знать:

  1. Можно ли программно получить байты на сектор для выбранной файловой системы
  2. Если нет, то есть ли значение по умолчанию для байтов на сектор, которое IMAPI использует для разных файловых систем / типов носителей, и задокументировано ли оно где-нибудь.

3 ответа

Решение

Итак, короткий ответ на мой вопрос: можно смело предположить, что размер сектора для дисков DVD/BD = 2048 байт.

Причина, по которой я получал разные размеры во время моих отладочных сессий, была из-за ошибки в коде, который извлекал количество секторов:)

Упомянутый блок кода был скопирован с http://www.codeproject.com/Articles/24544/Burning-and-Erasing-CD-DVD-Blu-ray-Media-with-C-an, так что на всякий случай я выкладываю быстрый исправить.

оригинальный код:

discFormatData = new MsftDiscFormat2Data();
discFormatData.Recorder = discRecorder;
IMAPI_MEDIA_PHYSICAL_TYPE mediaType = discFormatData.CurrentPhysicalMediaType;
fileSystemImage = new MsftFileSystemImage();
fileSystemImage.ChooseImageDefaultsForMediaType(mediaType);
if (!discFormatData.MediaHeuristicallyBlank)
{
     fileSystemImage.MultisessionInterfaces = discFormatData.MultisessionInterfaces;
     fileSystemImage.ImportFileSystem();
}
Int64 freeMediaBlocks = fileSystemImage.FreeMediaBlocks;

фиксированный код:

discFormatData = new MsftDiscFormat2Data { Recorder = discRecorder };
fileSystemImage = new MsftFileSystemImage();
fileSystemImage.ChooseImageDefaults(discRecorder);
if (!discFormatData.MediaHeuristicallyBlank)
{
    fileSystemImage.MultisessionInterfaces = discFormatData.MultisessionInterfaces;
    fileSystemImage.ImportFileSystem();
}
Int64 freeMediaBlocks = fileSystemImage.FreeMediaBlocks;

Через IMAPI - IWriteEngine2:: get_BytesPerSector

http://msdn.microsoft.com/en-us/library/windows/desktop/aa832661(v=vs.85).aspx

Этот проект использует управляемую оболочку IMAPI2, чтобы упростить жизнь. - http://www.codeproject.com/Articles/24544/Burning-and-Erasing-CD-DVD-Blu-ray-Media-with-C-an

Если вы знаете свободные / использованные блоки и общий размер тома хранилища (игнорируя используемое / свободное пространство), то вы можете рассчитать размер для блока и затем обработать остальное.

block size = total size / (blocks used + blocks free)
free space = size per block * blocks free

Я был бы удивлен, если бы вы обнаружили, что размер блока был чем-то отличным от 1К, хотя

Другие вопросы по тегам