You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中将IStorage存储对象保存为单个文件?

保存现有Storage对象为单个文件

要将已有IStorage对象保存为单个文件,核心是通过复制存储内容到新的文件存储实现,具体步骤和代码示例如下:

实现思路

  1. 创建一个新的文件存储作为目标输出文件
  2. 调用原IStorage对象的CopyTo方法,将所有内容复制到新存储
  3. 释放相关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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 06:54:53