IMAPI (C#.NET) を使用してメディア (CD/DVD) を書き込むコードを書いています。書き込みはすべて正常に機能します。メディアの空き容量を超えるファイルを追加しようとすると、例外がスローされます。例外をキャッチできますが、目的を果たしません。空き容量を超えていますが、ファイルを追加しに行きたいです。次に、必要に応じて必要な処理 (UI の更新、メッセージの表示、UI での画像のサイズの表示など) を行うユーザーに画像の合計サイズを返したいと考えています。つまり、空き容量を超えても画像の合計サイズを取得したいのです。多くのメディア書き込みアプリケーションがこれを行っていることがわかります。したがって、これは可能でなければなりません。
コードの次の行は例外をスローします: -
fileSystemImage.Root.AddFile(thisFileItem.DestPath + thisFileItem.DisplayName, stream);
例外の詳細は次のとおりです。 -
ComException
エラーコード: -1062555360
メッセージ: 'myfilename' を追加すると、結果の画像のサイズが現在構成されている制限よりも大きくなります。
以下は私のコードです: -
MsftDiscFormat2Data discFormatData = null;
MsftDiscRecorder2 discRecorder = null;
MsftFileSystemImage fileSystemImage = null;
discRecorder = new MsftDiscRecorder2();
discRecorder.InitializeDiscRecorder(UniqueRecorderId);
discFormatData = new MsftDiscFormat2Data
{
Recorder = discRecorder,
ClientName = CLIENT_NAME,
ForceMediaToBeClosed = _closeSession
};
fileSystemImage = new MsftFileSystemImage();
fileSystemImage.VolumeName = _volumeID;
fileSystemImage.Update += fileSystemImage_Update;
fileSystemImage.ChooseImageDefaults(discRecorder);
fileSystemImage.FileSystemsToCreate = FsiFileSystems.FsiFileSystemJoliet | FsiFileSystems.FsiFileSystemISO9660 | FsiFileSystems.FsiFileSystemUDF;
if(!discFormatData.MediaHeuristicallyBlank)
{
fileSystemImage.MultisessionInterfaces = discFormatData.MultisessionInterfaces;
fileSystemImage.ImportFileSystem();
}
foreach(FileItem thisFileItem in listFileItem)
{
IStream stream = null;
if(thisFileItem.SourcePath != null)
Win32.SHCreateStreamOnFile(thisFileItem.SourcePath, Win32.STGM_READ | Win32.STGM_SHARE_DENY_WRITE, ref stream);
fileSystemImage.Root.AddFile(thisFileItem.DestPath + thisFileItem.DisplayName, stream);
}
IFileSystemImageResult objIFileSystemImageResult;
objIFileSystemImageResult = fileSystemImage.CreateResultImage();
_imageSize = (objIFileSystemImageResult.TotalBlocks * objIFileSystemImageResult.BlockSize);
IStream imageStream = objIFileSystemImageResult.ImageStream;
fileSystemImage.Update -= fileSystemImage_Update;