Поделиться через


Метод 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, которая содержит имя только что созданного потока. Имя можно использовать позже для открытия или повторного открытия потока. Длина имени не должна превышать 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, существующий поток заменяется только что созданным. Как уничтожение старого потока, так и создание нового объекта потока подчиняются режиму транзакций родительского объекта хранилища.

Предоставленная COM реализация составного файла метода IStorage::CreateStream не поддерживает следующее поведение:

  • Флаг STGM_DELETEONRELEASE не поддерживается.
  • Режим транзакций (STGM_TRANSACTED) не поддерживается для объектов потока.
  • Открытие одного потока несколько раз из одного хранилища не поддерживается. Флаг режима общего доступа STGM_SHARE_EXCLUSIVE должен быть указан в параметре grfMode .
Если поток уже существует и grfMode имеет значение STGM_FAILIFTHERE, этот метод завершается ошибкой с возвращаемым значением STG_E_FILEALREADYEXISTS.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Целевая платформа Windows
Header objidl.h
Библиотека Uuid.lib
DLL Ole32.dll

См. также раздел

IStorage — реализация составного файла

IStorage::OpenStream

IStream