由於我原來的問題太含糊,讓我澄清一下。空白的DVD /藍光光盤上的可用空間(IMAPI)
我的目標是:
- 通過IMAPI
- 選擇文件系統估計空間,我的文件將在光盤上的消耗,如果我燒後估計空白光盤的大小。
我想知道什麼:
- 是否有可能獲取選定的文件系統每扇區字節編程
- 如果不是,是否有每哪個IMAPI使用的扇區字節數默認值不同的文件系統/媒體類型,並在某處記錄。
由於我原來的問題太含糊,讓我澄清一下。空白的DVD /藍光光盤上的可用空間(IMAPI)
我的目標是:
我想知道什麼:
好的,所以我的問題的簡短答案是:一個可以saf假設,DVD/BD盤的扇區大小= 2048字節。
的原因,爲什麼我在我的調試會話獲取不同的尺寸,是因爲在代碼中的錯誤,這檢索部門統計:)的
提到代碼塊從http://www.codeproject.com/Articles/24544/Burning-and-Erasing-CD-DVD-Blu-ray-Media-with-C-an copypasted,所以以防萬一即時發佈快速修復。
原代碼:
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;
如果您知道空閒/使用的塊和存儲卷的總大小(忽略使用/可用空間),那麼您可以計算每塊的大小,然後解決其餘部分。
block size = total size/(blocks used + blocks free)
free space = size per block * blocks free
我會感到驚訝,如果你發現了塊大小比其他任何1K雖然
但事情是 - 我不知道總大小。這就是爲什麼我需要扇形尺寸。所以我可以乘以扇區數並獲得以字節爲單位的空閒/已用/總空間。至少多數民衆贊成是我想出了> _> –
而不是,它不是1K。我調整了我的應用程序與各種媒體類型和塊大小從2048到4096不等(我通過查看總大小手動計算這些,在Windows資源管理器中顯示) –
只需使用DriveInfo實例獲取相同的總大小顯示在資源管理器中做計算。 - http://msdn.microsoft.com/en-us/library/system.io.driveinfo.aspx – PhonicUK
通過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
哦,我完全錯過了這個界面:S只要我有機會,我會盡力弄清楚如何使用它並報告結果。 :) CHeers。儘管如此,如果some1可以共享代碼示例 - 那真的很不錯。 –
如msdn上所述:「在寫入期間檢索每個扇區使用的字節數,返回的值表示先前使用IWriteEngine2 :: put_BytesPerSector設置的值,並且不會爲媒體返回每扇區值的當前字節數。」所以,這個屬性服務於不同的目的。 –
爲什麼不WMI的選擇? – PhonicUK
@ S.L。巴斯,我不這麼認爲。 –
@ PhonicUK,過去的經驗:)如果沒有其他方法,我會使用它。我希望通過IMAPI獲得這些值,tbh。 –