如何在C++中将IStorage存储对象保存为单个文件?
保存现有Storage对象为单个文件
要将已有IStorage对象保存为单个文件,核心是通过复制存储内容到新的文件存储实现,具体步骤和代码示例如下:
实现思路
- 创建一个新的文件存储作为目标输出文件
- 调用原
IStorage对象的CopyTo方法,将所有内容复制到新存储 - 释放相关COM接口,完成保存
代码示例(C++)
IStorage* pSrcStorage = /* 你已有的从Outlook拖入得到的Storage对象 */; IStorage* pDestStorage = nullptr; // 创建目标文件存储 HRESULT hr = StgCreateDocfile( L"C:\\SavedOutlookItem.msg", // 输出文件路径 STGM_CREATE | STGM_WRITE | STGM_SHARE_EXCLUSIVE, 0, &pDestStorage ); if (SUCCEEDED(hr)) { // 复制原存储的全部内容到目标存储 hr = pSrcStorage->CopyTo( 0, // 保留所有元素,不使用过滤 nullptr, // 不指定元素名称,复制全部 nullptr, // 不使用回调 pDestStorage ); // 释放目标存储接口(会自动写入磁盘) pDestStorage->Release(); } // 释放原存储接口(根据你的业务逻辑决定是否在此释放) // pSrcStorage->Release();
关键说明
StgCreateDocfile用于创建新的文件存储,这里作为输出载体,参数STGM_CREATE表示覆盖已有文件(若需追加可调整参数)。IStorage::CopyTo是核心方法,它会递归复制原存储中的所有子存储、流以及属性,确保输出文件和原存储内容完全一致。- 注意COM接口的释放顺序,避免资源泄漏;如果原存储是从拖放操作获取的,需遵循其生命周期管理规则。
内容的提问来源于stack exchange,提问作者LUN
相关产品推荐
相关产品推荐

