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) 。
  • 不支援從相同的記憶體多次開啟相同的數據流。 STGM_SHARE_EXCLUSIVE共用模式旗標必須在 grfMode 參數中指定。
如果數據流已經存在,且 grfMode 設定為 STGM_FAILIFTHERE,則此方法會失敗並傳回值STG_E_FILEALREADYEXISTS。

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows 2000 Server [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 objidl.h
程式庫 Uuid.lib
Dll Ole32.dll

另請參閱

IStorage - 複合檔案實作

IStorage::OpenStream

IStream