Método IRootStorage::SwitchToFile (objidl.h)

El método SwitchToFile copia el archivo actual asociado al objeto de almacenamiento en un nuevo archivo. A continuación, el nuevo archivo se usa para el objeto de almacenamiento y los cambios no confirmados.

Sintaxis

HRESULT SwitchToFile(
  LPOLESTR pszFile
);

Parámetros

pszFile

Puntero a una cadena terminada en null que especifica el nombre de archivo para el nuevo archivo. No puede ser el nombre de un archivo existente. Si es NULL, este método crea un archivo temporal con un nombre único y puede llamar a IStorage::Stat para recuperar el nombre del archivo temporal.

Valor devuelto

Este método puede devolver uno de estos valores.

Código devuelto Descripción
S_OK El archivo se copió correctamente.
STG_E_MEDIUMFULL El archivo no se copió debido a un espacio insuficiente en el dispositivo de almacenamiento.
STG_E_ACCESSDENIED El archivo no se copió porque el autor de la llamada no tiene permiso para acceder al dispositivo de almacenamiento.
STG_E_INVALIDPOINTER El archivo no se copió porque el puntero pszFile no es válido.
STG_E_FILEALREADYEXISTS El archivo no se copió porque el nuevo nombre de archivo (pszFile) apunta a un archivo existente.

Comentarios

El método IRootStorage::SwitchToFile copia el archivo asociado al objeto de almacenamiento. Un contenedor COM llama a SwitchToFile para realizar un guardado completo en un archivo en una situación de poca memoria. Normalmente, esto solo se realiza después de una operación normal y completa de guardado (es decir, guardar en un archivo temporal, eliminar archivo original, cambiar el nombre del archivo temporal) ha producido un error de E_OUTOFMEMORY.

Es erróneo llamar al método SwitchToFile si el objeto de almacenamiento o cualquier cosa contenida en él se ha serializado en otro proceso. Antes de llamar a SwitchToFile, el contenedor debe llamar al método IPersistStorage::HandsOffStorage para cualquier elemento del objeto de almacenamiento que se cargue o ejecute. El método HandsOffStorage obliga al elemento a liberar sus punteros de almacenamiento y entrar en el modo de almacenamiento de manos fuera. El contenedor también debe liberar todos los punteros a secuencias o almacenamientos contenidos en este almacenamiento raíz. Una vez completada la operación de guardado completa, el contenedor devuelve los elementos contenidos al modo de almacenamiento normal.

Notas para los implementadores

Si va a implementar sus propios objetos de almacenamiento, los métodos IRootStorage (incluidos QueryInterface, AddRef y Release) no deben consumir memoria adicional ni identificadores de archivo.

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

IPersistStorage::HandsOffStorage

IPersistStorage::SaveCompleted

IStorage::Commit

IStorage::Stat