IRootStorage::SwitchToFile
Copies the
current file associated with the storage object to a new file. The new file is
then used for the storage object and any uncommitted changes.
HRESULT SwitchToFile(
|
LPOLESTR pszFile |
//Filename
for the new file |
|
); |
|
Parameter
pszFile
Specifies the
filename for the new file. It cannot be the name of an existing file. If NULL,
this method creates a temporary file with a unique name, and you can call IStorage::Stat to retrieve the name of the
temporary file.
Return Values
S_OK
The file was
successfully copied.
STG_E_MEDIUMFULL
The file was
not copied because of insufficient space on the storage device.
STG_E_ACCESSDENIED
The file was
not copied because the caller does not have permission to access storage
device.
STG_E_INVALIDPOINTER
The file was
not copied because the pszFile pointer is invalid.
STG_E_FILEALREADYEXISTS
The file was
not copied because the new filename (pszFile) points to an existing
file.
Remarks
The IRootStorage::SwitchToFile
method copies the file associated with the storage object. An OLE container
calls SwitchToFile to perform a full save on a file in a low-memory
situation. Typically, this is done only after a normal full save operation
(i.e., save to temporary file, delete original file, rename temporary file) has
failed with an E_OUTOFMEMORY error.
It is illegal
to call SwitchToFile if the storage object or anything contained within
it has been marshalled to another process. As a consequence, before calling SwitchToFile,
the container must call the IPersistStorage::HandsOffStorage method for any element
within the storage object that is loaded or running. The HandsOffStorage
method forces the element to release its storage pointers and enter the hands-off
storage mode. The container must also release all pointers to streams or
storages that are contained in this root storage. After the full save operation
is completed, the container returns the contained elements to normal storage
mode.
Notes to Implementers
If you are
implementing your own storage objects, the IRootStorage methods (including QueryInterface,
AddRef, and Release) must not consume additional memory or file
handles.
See Also