IStorage::CreateStorage 方法 (objidl.h)

CreateStorage 方法在指定的访问模式下使用指定名称创建并打开嵌套在此存储对象中的新存储对象。

语法

HRESULT CreateStorage(
  [in]  const OLECHAR *pwcsName,
  [in]  DWORD         grfMode,
  [in]  DWORD         reserved1,
  [in]  DWORD         reserved2,
  [out] IStorage      **ppstg
);

参数

[in] pwcsName

指向以 null 结尾的宽字符 Unicode 字符串的指针,该字符串包含新创建的存储对象的名称。 该名称稍后可用于重新打开存储对象。 名称的长度不得超过 31 个字符,不包括字符串终止符。 保留 000 到 01f 字符,用作流/存储名称的第一个字符,供 OLE 使用。 这是复合文件限制,而不是结构化存储限制。

[in] grfMode

一个 值,该值指定打开新创建的存储对象时要使用的访问模式。 有关详细信息和可能值的说明,请参阅 STGM 常量

[in] reserved1

留待将来使用;必须为零。

[in] reserved2

留待将来使用;必须为零。

[out] ppstg

成功时,指向指向新创建的存储对象的 IStorage 指针位置的指针。 如果发生错误,此参数将设置为 NULL

返回值

此方法可以返回其中一个值。

返回代码 说明
S_OK 已成功创建存储对象。
E_PENDING 仅限异步存储:部分或全部必要数据当前不可用。
STG_E_ACCESSDENIED 没有足够的权限来创建存储对象。
STG_E_FILEALREADYEXISTS 为存储对象指定的名称已存在于存储对象中, grfMode 参数包含标志STGM_FAILIFTHERE。
STG_E_INSUFFICIENTMEMORY 由于内存不足,未创建存储对象。
STG_E_INVALIDFLAG grfMode< 参数指定的值不是有效的 STGM 常量值。 为 grfMode 参数指定的值无效
STG_E_INVALIDFUNCTION 不支持 grfMode 参数中的指定标志组合。
STG_E_INVALIDNAME pwcsName 的值无效。
STG_E_INVALIDPOINTER 为存储对象指定的指针无效。
STG_E_INVALIDPARAMETER 其中一个参数无效。
STG_E_REVERTED 事务树中存储对象上方的还原操作已失效。
STG_E_TOOMANYOPENFILES 未创建存储对象,因为打开的文件太多。
STG_S_CONVERTED 具有指定名称的现有流已替换为包含名为 CONTENTS 的单个流的新存储对象。 将添加新的存储对象。

注解

如果具有 pwcsName 参数指定名称的存储已存在于父存储对象中,并且 grfMode 参数包含 STGM_CREATE 标志,则现有存储将替换为新的存储。 如果 grfMode 参数包含 STGM_CONVERT 标志,则现有元素将转换为名为 CONTENTS 的流对象,并创建包含 CONTENTS 流对象的新存储对象。 旧元素的销毁和新存储对象的创建均受父存储对象上的事务模式的约束。 请注意,如果还使用 STGM_CREATE,则不能使用 STGM_CONVERT。

COM 提供的 IStorage::CreateStorage 方法的复合文件实现不支持以下行为:

  • 非根存储的STGM_PRIORITY标志。
  • 从同一父存储多次打开同一存储对象。 必须指定STGM_SHARE_EXCLUSIVE标志。
  • STGM_DELETEONRELEASE标志。 如果指定了此标志,则函数将返回STG_E_INVALIDFLAG。
如果已存在同名的存储对象,并且 grfMode 设置为 STGM_FAILIFTHERE,则此方法将失败,返回值STG_E_FILEALREADYEXISTS。

要求

要求
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 objidl.h
Library Uuid.lib
DLL Ole32.dll

另请参阅

IStorage - 复合文件实现

IStorage::OpenStorage