空白DVD /蓝光光盘(IMAPI)上的可用空间

时间:2012-09-14 11:11:48

标签: c# .net imapi

由于我原来的问题有点过于模糊,请让我澄清一下。

我的目标是:

  1. 通过IMAPI
  2. 选择文件系统后估算空白光盘大小
  3. 如果我刻录它,估计我的文件将在此光盘上消耗的空间。
  4. 我想知道的是:

    1. 是否可以通过编程方式获取所选文件系统的每个扇区的字节数
    2. 如果没有,IMAPI用于不同文件系统/媒体类型的每个扇区的字节是否有默认值,是否记录在某处。

3 个答案:

答案 0 :(得分:4)

好的,所以对我的问题的简短回答是:可以安全地假设,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;

答案 1 :(得分:0)

如果您知道空闲/已使用的块和存储卷的总大小(忽略已用/可用空间),那么您可以计算每个块的大小,然后完成剩下的工作。

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

如果您发现块大小不是1K,我会感到惊讶

答案 2 :(得分:0)