0
我正在編寫使用IMAPI(C#.NET)編寫媒體(CD/DVD)的代碼。 寫作工作一切正常。 如果我嘗試添加超過媒體上可用空間的文件,它會拋出異常。 我可以捕捉異常,但它不符合我的目的。 我想要添加文件,即使它超過了可用空間。 然後,我想將圖像的總大小返回給用戶,然後根據需要執行必要的操作(更新UI,顯示消息,在UI上顯示圖像大小等)。 換句話說,即使超過了可用空間,我也希望獲得全部圖像大小。 我可以看到許多媒體刻錄應用程序正在這樣做;所以這一定是可能的。IMAPI:如果圖像大小超過可用空間,如何獲得圖像大小而不會引發異常?
繼代碼行拋出異常: -
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;
這是IMAPI_E_IMAGE_SIZE_LIMIT。這意味着只有一件事,你達到了規模限制。它怎麼可能不起作用?沒有TryAdd()方法,它將不得不做。 –
@HansPassant:同意;但是有許多媒體刻錄應用程序顯示總圖像大小,即使大小超過可用空間。無論可用空間有多大,我都希望返回總圖像大小。 –