IStorage::CopyTo 方法 (objidl.h)
CopyTo 方法會將開啟儲存物件的完整內容複製到另一個儲存物件。
語法
HRESULT CopyTo(
[in] DWORD ciidExclude,
[in] const IID *rgiidExclude,
[in] SNB snbExclude,
[in] IStorage *pstgDest
);
參數
[in] ciidExclude
rgiidExclude 所指向數位中的元素數目。 如果 rgiidExclude 是 NULL,則會忽略 ciidExclude 。
[in] rgiidExclude
介面識別碼的陣列 (IID) 呼叫端知道且不想要複製或記憶體物件不支援,但呼叫端稍後會明確複製其狀態。 數位可以包含 IStorage,指出只複製數據流物件, 而 IStream 則表示只複製儲存物件。 陣組長度為零表示只複製 IStorage 物件所公開的狀態;物件上所有其他介面都會被忽略。 傳遞 NULL 表示要複製物件上的所有介面。
[in] snbExclude
字串名稱區塊 (參照 SNB) ,指定不複製到目的地的記憶體或數據流物件區塊。 這些元素不會在目的地建立。 如果 IID_IStorage 位於 rgiidExclude 陣列中,則會忽略此參數。 此參數可以是 NULL。
[in] pstgDest
要複製此儲存物件之開啟儲存物件的指標。 目的地儲存物件可以是與來源記憶體物件不同的 IStorage 介面實作。 因此, IStorage::CopyTo 只能使用目的地記憶體對象的公開可用方法。 如果 pstgDest 是以交易模式開啟,可以藉由呼叫其 IStorage::Revert 方法來還原。
傳回值
這個方法可以傳回其中一個值。
傳回碼 | 描述 |
---|---|
S_OK | 已成功複製記憶體物件。 |
E_PENDING | 僅限異步記憶體:目前無法使用要複製的部分或所有數據。 |
STG_E_ACCESSDENIED | 目的地記憶體對像是來源記憶體物件的子系。 |
STG_E_INSUFFICIENTMEMORY | 因為記憶體不足而無法完成複本。 |
STG_E_INVALIDPOINTER | 為儲存物件指定的指標無效。 |
STG_E_INVALIDPARAMETER | 其中一個參數無效。 |
STG_E_TOOMANYOPENFILES | 復本尚未完成,因為有太多開啟的檔案。 |
STG_E_REVERTED | 記憶體物件已由交易樹狀結構中上方的還原作業失效。 |
STG_E_MEDIUMFULL | 因為儲存媒體已滿,所以尚未完成複本。 |
備註
這個方法會將來源儲存物件中包含的專案與目的地中已存在的項目合併。 目的地儲存物件的版面配置可能與來源儲存物件不同。
複製程式是遞歸的,叫用來源內巢狀元素上的 IStorage::CopyTo 和 IStream::CopyTo 。
複製相同名稱的現有數據流上方的數據流時,會先移除現有的數據流,然後再以來源數據流取代。 在具有相同名稱的現有記憶體上複製記憶體時,不會移除現有的記憶體。 因此,在複製作業之後,目的地 IStorage 會包含較舊的元素,除非它們被較新的元素取代為相同名稱。
記憶體物件可能會公開 IStorage 以外的介面,包括 IRootStorage、IPropertyStorage 或 IPropertySetStorage。 rgiidExclude 參數允許從複製作業排除任何或所有額外的介面。
具有較新或更有效率之現有子記憶體或數據流物件的呼叫端,可能會想要從複製作業中排除這些物件的目前版本。 snbExclude 和 rgiidExclude 參數提供兩種方式來排除記憶體物件現有的記憶體或數據流。
呼叫端的注意事項
使用 IStorage::CopyTo 方法最常見的方法是將來源的所有專案複製到目的地,如同大部分的完整儲存和另存新檔作業一樣。下列範例程式代碼示範如何將所有專案從來源記憶體物件複製到目的地儲存物件。
pstg->CopyTo(0, Null, Null, pstgDest)
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows 2000 Server [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | objidl.h |
程式庫 | Uuid.lib |
Dll | Ole32.dll |