Metodo IStorage::CopyTo (objidl.h)
Il metodo CopyTo copia l'intero contenuto di un oggetto di archiviazione aperto in un altro oggetto di archiviazione.
Sintassi
HRESULT CopyTo(
[in] DWORD ciidExclude,
[in] const IID *rgiidExclude,
[in] SNB snbExclude,
[in] IStorage *pstgDest
);
Parametri
[in] ciidExclude
Numero di elementi nella matrice a cui punta rgiidExclude. Se rgiidExclude è NULL, ciidExclude viene ignorato.
[in] rgiidExclude
Matrice di identificatori di interfaccia (IID) che il chiamante conosce e non vuole copiare o che l'oggetto di archiviazione non supporta, ma il cui stato il chiamante verrà copiato in un secondo momento in modo esplicito. La matrice può includere IStorage, a indicare che devono essere copiati solo gli oggetti flusso e IStream, che indica che devono essere copiati solo gli oggetti di archiviazione. Una lunghezza di matrice pari a zero indica che deve essere copiato solo lo stato esposto dall'oggetto IStorage ; tutte le altre interfacce sull'oggetto devono essere ignorate. Il passaggio di NULL indica che tutte le interfacce dell'oggetto devono essere copiate.
[in] snbExclude
Blocco di nomi stringa (fare riferimento a SNB) che specifica un blocco di oggetti di archiviazione o flusso che non devono essere copiati nella destinazione. Questi elementi non vengono creati nella destinazione. Se IID_IStorage si trova nella matrice rgiidExclude , questo parametro viene ignorato. Questo parametro può essere NULL.
[in] pstgDest
Puntatore all'oggetto di archiviazione aperto in cui deve essere copiato questo oggetto di archiviazione. L'oggetto di archiviazione di destinazione può essere un'implementazione diversa dell'interfaccia IStorage dall'oggetto di archiviazione di origine. IStorage::CopyTo può quindi usare solo metodi disponibili pubblicamente dell'oggetto di archiviazione di destinazione. Se pstgDest è aperto in modalità transacted, può essere ripristinato chiamando il relativo metodo IStorage::Revert .
Valore restituito
Questo metodo può restituire uno di questi valori.
Codice restituito | Descrizione |
---|---|
S_OK | L'oggetto di archiviazione è stato copiato correttamente. |
E_PENDING | Solo archiviazione asincrona: parte o tutti i dati da copiare non sono attualmente disponibili. |
STG_E_ACCESSDENIED | L'oggetto di archiviazione di destinazione è un elemento figlio dell'oggetto di archiviazione di origine. |
STG_E_INSUFFICIENTMEMORY | La copia non è stata completata a causa di una mancanza di memoria. |
STG_E_INVALIDPOINTER | Il puntatore specificato per l'oggetto di archiviazione non è valido. |
STG_E_INVALIDPARAMETER | Uno dei parametri non è valido. |
STG_E_TOOMANYOPENFILES | La copia non è stata completata perché sono presenti troppi file aperti. |
STG_E_REVERTED | L'oggetto di archiviazione è stato invalidato da un'operazione di ripristino sopra di essa nell'albero delle transazioni. |
STG_E_MEDIUMFULL | La copia non è stata completata perché il supporto di archiviazione è pieno. |
Commenti
Questo metodo unisce gli elementi contenuti nell'oggetto di archiviazione di origine con quelli già presenti nella destinazione. Il layout dell'oggetto di archiviazione di destinazione può differire dall'oggetto di archiviazione di origine.
Il processo di copia è ricorsivo, richiamando IStorage::CopyTo e IStream::CopyTo sugli elementi annidati all'interno dell'origine.
Quando si copia un flusso sopra un flusso esistente con lo stesso nome, il flusso esistente viene prima rimosso e quindi sostituito con il flusso di origine. Quando si copia una risorsa di archiviazione su una risorsa di archiviazione esistente con lo stesso nome, lo spazio di archiviazione esistente non viene rimosso. Di conseguenza, dopo l'operazione di copia, la destinazione IStorage contiene elementi meno recenti, a meno che non siano stati sostituiti da quelli più recenti con gli stessi nomi.
Un oggetto di archiviazione può esporre interfacce diverse da IStorage, tra cui IRootStorage, IPropertyStorage o IPropertySetStorage. Il parametro rgiidExclude consente l'esclusione di qualsiasi o di tutte queste interfacce aggiuntive dall'operazione di copia.
Un chiamante con una copia più recente o più efficiente di un oggetto sottostorage o flusso esistente può voler escludere le versioni correnti di questi oggetti dall'operazione di copia. I parametri snbExclude e rgiidExclude offrono due modi per escludere gli oggetti di archiviazione o i flussi esistenti.
Nota ai chiamanti
Il modo più comune per usare il metodo IStorage::CopyTo consiste nel copiare tutti gli elementi dall'origine alla destinazione, come nella maggior parte delle operazioni di salvataggio e salvataggio con nome completo.Il codice di esempio seguente mostra come copiare tutti gli elementi dall'oggetto di archiviazione di origine all'oggetto di archiviazione di destinazione.
pstg->CopyTo(0, Null, Null, pstgDest)
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Professional [app desktop | App UWP] |
Server minimo supportato | Windows 2000 Server [app desktop | App UWP] |
Piattaforma di destinazione | Windows |
Intestazione | objidl.h |
Libreria | Uuid.lib |
DLL | Ole32.dll |