IStorage::CreateStream 方法 (objidl.h)

CreateStream 方法创建并打开具有此存储对象中包含的指定名称的流对象。 存储对象中的所有元素(流和其他存储对象)都保留在同一名称空间中。

语法

HRESULT CreateStream(
  [in]  const OLECHAR *pwcsName,
  [in]  DWORD         grfMode,
  [in]  DWORD         reserved1,
  [in]  DWORD         reserved2,
  [out] IStream       **ppstm
);

参数

[in] pwcsName

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

[in] grfMode

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

[in] reserved1

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

[in] reserved2

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

[out] ppstm

返回时,指向新 IStream 接口指针的位置的指针。 仅当操作成功时,这才有效。 发生错误时,此参数设置为 NULL

返回值

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

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

注解

如果具有 pwcsName 参数中指定的名称的流已存在,并且 grfMode 参数包含 STGM_CREATE 标志,则现有流将替换为新创建的流。 旧流的销毁和新流对象的创建均受父存储对象上的事务模式的约束。

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

  • 不支持STGM_DELETEONRELEASE标志。
  • 流对象不支持事务处理模式 (STGM_TRANSACTED) 。
  • 不支持从同一存储多次打开同一流。 必须在 grfMode 参数中指定STGM_SHARE_EXCLUSIVE共享模式标志。
如果流已存在并且 grfMode 设置为 STGM_FAILIFTHERE,则此方法将失败,返回值STG_E_FILEALREADYEXISTS。

要求

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

另请参阅

IStorage - 复合文件实现

IStorage::OpenStream

IStream