IMAPI:COMException 发生内部文件系统错误 [-1062555360]

Posted

技术标签:

【中文标题】IMAPI:COMException 发生内部文件系统错误 [-1062555360]【英文标题】:IMAPI: COMException Internal file system error occurred [-1062555360 ] 【发布时间】:2016-08-21 19:59:24 【问题描述】:

我正在使用带有 C#.NET windows 应用程序的 IMAPI 编写 CD/DVD。 我在 CD 上写入的数据包含一个可执行文件 (test.exe),该文件也是用 C#.NET 开发的,并使用 Turbo Virtualization Studio 虚拟化(sandobx)。 所有要写入 CD 的数据都放在 C 盘上的一个文件夹(源路径)中。

以下是小代码sn-p:-

IStream stream = null;
try

    System.Diagnostics.Debug.Print("Adding - " + thisFileItem.SourcePath);
    if (thisFileItem.SourcePath != null)
    Win32.SHCreateStreamOnFile(thisFileItem.SourcePath, Win32.STGM_READ | Win32.STGM_SHARE_DENY_WRITE, ref stream);
    if (stream != null)
    
        fileSystemImage.Root.AddFile(thisFileItem.DestPath + thisFileItem.DisplayName, stream);
    

finally

    if (stream != null)
    
        Marshal.FinalReleaseComObject(stream);
    

在添加 test.exe 时调用“fileSystemImage.Root.AddFile”方法会引发 COMException -1062555360“发生内部文件系统错误。”所有其他文件都可以正确添加和写入。

异常详情:-

COMException -1062555360
Internal file system error occurred.
   at ImapiInterop.IFsiDirectoryItem.AddFile(String path, IStream fileData)
   at ImapiImplementation.CDWriter.objBackgroundWorker_DoWork(Object sender, DoWorkEventArgs e) in C:\.........\CDWriter.cs:line 405

如果我将源文件夹放在其他位置(桌面或 D 驱动器),所有写入过程(包括 test.exe)都会正常进行而不会出错。

我怀疑这个问题是由于虚拟化造成的,但不确定。 请帮忙。

【问题讨论】:

-1062555360 == 0xC0AAB120 == IMAPI_E_IMAGE_SIZE_LIMIT == “添加‘文件名’会导致结果图像的大小大于当前配置的限制”。 IMAPI 当然不知道文件的来源。 【参考方案1】:

IMAPI 返回的错误信息不正确,这就是所有混乱的原因。 请参考以下链接。

social.msdn.microsoft.com

以下是从上述网站上的答案(来自 Dmitri)复制的文本:-

IMAPI 支持 ISupportErrorInfo 接口,我们知道 场景中错误消息不匹配的问题。

在内部,IMAPI 创建回滚对象以撤消添加/删除文件 行动。我们在创建回滚操作时遇到了问题 过早地,所以在 IFsiDirectoryItem::AddFile 的返回码之后 已设置,回滚操作是从 图片。由于尚未添加文件,IMAPI_E_FSI_INTERNAL_ERROR 抛出异常,将 IErrorInfo 消息更改为 你看到了。

我们已注意到此问题,并将在下一个版本中修复 IMAPI。不幸的是,它还不够严重,无法在一个 修补程序。

【讨论】:

以上是关于IMAPI:COMException 发生内部文件系统错误 [-1062555360]的主要内容,如果未能解决你的问题,请参考以下文章

IMAPI2:添加文件和文件夹失败

空白 DVD/蓝光光盘 (IMAPI) 上的可用空间

IMAPI2 可以刻录大于 4Gb 的文件吗?

在磁盘中创建一个文件夹并使用 IMAPI 2 刻录到它

.NET 中的 IMAPI2 MsftFileSystemImage 在创建 ISO 时未释放文件

如何在使用 IMAPI 创建的 ISO 文件中显式创建目录结构?