Método IStorage::CopyTo (objidl.h)
El método CopyTo copia todo el contenido de un objeto de almacenamiento abierto en otro objeto de almacenamiento.
Sintaxis
HRESULT CopyTo(
[in] DWORD ciidExclude,
[in] const IID *rgiidExclude,
[in] SNB snbExclude,
[in] IStorage *pstgDest
);
Parámetros
[in] ciidExclude
Número de elementos de la matriz a los que apunta rgiidExclude. Si rgiidExclude es NULL, se omite ciidExclude .
[in] rgiidExclude
Matriz de identificadores de interfaz (IID) que el autor de la llamada conoce y no quiere copiar o que el objeto de almacenamiento no admite, pero cuyo estado copiará el autor de la llamada más adelante. La matriz puede incluir IStorage, lo que indica que solo se van a copiar objetos de secuencia e IStream, lo que indica que solo se van a copiar los objetos de almacenamiento. Una longitud de matriz de cero indica que solo se va a copiar el estado expuesto por el objeto IStorage ; Se omitirán todas las demás interfaces del objeto. Pasar NULL indica que se van a copiar todas las interfaces del objeto.
[in] snbExclude
Bloque de nombre de cadena (consulte SNB) que especifica un bloque de objetos de almacenamiento o de secuencia que no se van a copiar en el destino. Estos elementos no se crean en el destino. Si IID_IStorage está en la matriz rgiidExclude , se omite este parámetro. Este parámetro puede ser NULL.
[in] pstgDest
Puntero al objeto de almacenamiento abierto en el que se va a copiar este objeto de almacenamiento. El objeto de almacenamiento de destino puede ser una implementación diferente de la interfaz IStorage del objeto de almacenamiento de origen. Por lo tanto, IStorage::CopyTo solo puede usar métodos disponibles públicamente del objeto de almacenamiento de destino. Si pstgDest está abierto en modo de transacción, se puede revertir llamando al método IStorage::Revert .
Valor devuelto
Este método puede devolver uno de estos valores.
Código devuelto | Descripción |
---|---|
S_OK | El objeto de almacenamiento se copió correctamente. |
E_PENDING | Solo almacenamiento asincrónico: la parte o todos los datos que se van a copiar no están disponibles actualmente. |
STG_E_ACCESSDENIED | El objeto de almacenamiento de destino es un elemento secundario del objeto de almacenamiento de origen. |
STG_E_INSUFFICIENTMEMORY | La copia no se completó debido a una falta de memoria. |
STG_E_INVALIDPOINTER | El puntero especificado para el objeto de almacenamiento no era válido. |
STG_E_INVALIDPARAMETER | Uno de los parámetros no era válido. |
STG_E_TOOMANYOPENFILES | No se completó la copia porque hay demasiados archivos abiertos. |
STG_E_REVERTED | Una operación de reversión por encima de él ha invalidado el objeto de almacenamiento en el árbol de transacciones. |
STG_E_MEDIUMFULL | La copia no se completó porque el medio de almacenamiento está lleno. |
Comentarios
Este método combina elementos contenidos en el objeto de almacenamiento de origen con los que ya están presentes en el destino. El diseño del objeto de almacenamiento de destino puede diferir del objeto de almacenamiento de origen.
El proceso de copia es recursivo, invocando IStorage::CopyTo e IStream::CopyTo en los elementos anidados dentro del origen.
Al copiar una secuencia encima de una secuencia existente con el mismo nombre, primero se quita la secuencia existente y, a continuación, se reemplaza por la secuencia de origen. Al copiar un almacenamiento encima de un almacenamiento existente con el mismo nombre, no se quita el almacenamiento existente. Como resultado, después de la operación de copia, el IStorage de destino contiene elementos anteriores, a menos que se reemplazaran por otros más recientes por los mismos nombres.
Un objeto de almacenamiento puede exponer interfaces distintas de IStorage, como IRootStorage, IPropertyStorage o IPropertySetStorage. El parámetro rgiidExclude permite la exclusión de cualquiera o todas estas interfaces adicionales de la operación de copia.
Un autor de llamada con una copia más reciente o más eficaz de un substorage o objeto de secuencia existente puede querer excluir las versiones actuales de estos objetos de la operación de copia. Los parámetros snbExclude y rgiidExclude proporcionan dos maneras de excluir los objetos de almacenamiento existentes o secuencias.
Nota para los autores de llamadas
La manera más común de usar el método IStorage::CopyTo es copiar todo desde el origen hasta el destino, como en la mayoría de las operaciones de guardado y guardado como.En el código de ejemplo siguiente se muestra cómo copiar todo desde el objeto de almacenamiento de origen al objeto de almacenamiento de destino.
pstg->CopyTo(0, Null, Null, pstgDest)
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 2000 Professional [aplicaciones de escritorio | Aplicaciones para UWP] |
Servidor mínimo compatible | Windows 2000 Server [aplicaciones de escritorio | Aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | objidl.h |
Library | Uuid.lib |
Archivo DLL | Ole32.dll |