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