2016-05-14 74 views
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; 
+0

這是IMAPI_E_IMAGE_SIZE_LIMIT。這意味着只有一件事,你達到了規模限制。它怎麼可能不起作用?沒有TryAdd()方法,它將不得不做。 –

+0

@HansPassant:同意;但是有許多媒體刻錄應用程序顯示總圖像大小,即使大小超過可用空間。無論可用空間有多大,我都希望返回總圖像大小。 –

回答

0

不是一個解決辦法,但我得到了破解。

fileSystemImage.FreeMediaBlocks = int.MaxValue; 

這將允許創建任何大小的圖像(達到整數限制),而不管插入介質上的空閒塊。然後,您可以用自己的方式實施驗證。