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共享模式标志。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 专业版 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows 2000 Server [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | objidl.h |
Library | Uuid.lib |
DLL | Ole32.dll |