Condividi tramite


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)
Nota Per compattare un file di documento, chiamare CopyTo sull'oggetto di archiviazione radice e copiarlo in un nuovo oggetto di archiviazione.
 

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

Vedi anche

IStorage - Implementazione di file composti

IStorage::MoveElementTo

IStorage::Revert