问题描述
在刻录时,采用SHCreateStreamOnFile的方式读文件.然后把IStreamAdd到IFileSystemImage的root里.如果不是空盘的需要调用IFileSystemImage的ImportFileSystem函数.然后调用IFileSystemImage的Creatresult函数生成一个结果的IStream用来刻录.我现在在刻录空盘后,80%可能释放掉文件,也就是说用SHCreateStreamOnFile读的文件能够被释放.但是如果刻录非空盘,调用ImportFileSystem函数的话,就不能释放文件,文件完全不能被删除.为什么资源没有被释放掉哪?相关代码片断如下:读文件代码片断:try{Win32.SHCreateStreamOnFile(filePath,Win32.STGM_READ|Win32.STGM_SHARE_DENY_WRITE,refstream);if(stream!=null){rootItem.AddFile(displayName,stream);returntrue;}}catch(Exceptionex){}finally{if(stream!=null){intiReturn=Marshal.FinalReleaseComObject(stream);}}生成FsiFileMsftFileSystemImagefileSystemImage=null;IFileSystemImageResultfileSystemImageResult=null;IFsiDirectoryItemrootItem=null;try{fileSystemImage=newMsftFileSystemImage();fileSystemImage.ChooseImageDefaults(discRecorder);fileSystemImage.FileSystemsToCreate=FsiFileSystems.FsiFileSystemJoliet|FsiFileSystems.FsiFileSystemISO9660;fileSystemImage.VolumeName=m_BurnData.ClientName;fileSystemImage.Update+=fileSystemImage_Update;if(multisessionInterfaces!=null){fileSystemImage.MultisessionInterfaces=multisessionInterfaces;FsiFileSystemsfsi=fileSystemImage.ImportFileSystem();fsi=fileSystemImage.IdentifyFileSystemsOnDisc(discRecorder);}fileSystemImageResult=fileSystemImage.CreateResultImage();dataStream=fileSystemImageResult.ImageStream;}finally{if(rootItem!=null){Marshal.FinalReleaseComObject(rootItem);}if(fileSystemImageResult!=null){Marshal.FinalReleaseComObject(fileSystemImageResult);}if(fileSystemImage!=null){Marshal.FinalReleaseComObject(fileSystemImage);}}
解决方案
解决方案二:
等待高手指点~
解决方案三:
我也遇到了同样的问题了,添加的文件在创建ISO镜像之后不能释放。求解答。。