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)
Nota Para compactar un archivo de documento, llame a CopyTo en el objeto de almacenamiento raíz y cópielo en un nuevo objeto de almacenamiento.
 

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

Consulte también

IStorage: implementación de archivos compuestos

IStorage::MoveElementTo

IStorage::Revert