10

私の最初の質問は少し漠然としていたので、明確にさせてください。

私の目標は次のとおりです。

  1. IMAPI 経由でファイルシステムを選択した後、ブランク ディスクのサイズを見積もる
  2. このディスクを焼いた場合、ファイルがこのディスクで消費するスペースを見積もる。

私が知りたいこと:

  1. 選択したファイル システムのセクターあたりのバイト数をプログラムで取得することは可能ですか?
  2. そうでない場合、IMAPIがさまざまなファイルシステム/メディアタイプに使用するセクターあたりのバイト数のデフォルト値はありますか?それはどこかに文書化されています.
4

3 に答える 3

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;
于 2012-09-17T08:12:44.643 に答える
0

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

于 2012-09-14T15:49:17.413 に答える
0

空き/使用済みブロックとストレージボリュームの合計サイズ(使用済み/空き領域を無視)がわかっている場合は、ブロックごとのサイズを計算して、残りを計算できます。

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

ブロックサイズが1K以外であることに気付いたら、私は驚きます。

于 2012-09-14T13:03:00.360 に答える