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(

//Filename for the new file



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


The file was successfully copied.


The file was not copied because of insufficient space on the storage device.


The file was not copied because the caller does not have permission to access storage device.


The file was not copied because the pszFile pointer is invalid.


The file was not copied because the new filename (pszFile) points to an existing file.


The IRootStorage::SwitchToFile method copies the file associated with the storage object. An OLE container calls IRootStorage::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 IRootStorage::SwitchToFile if the storage object or anything contained within it has been marshalled to another process. As a consequence, 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 Implementors

If you are implementing your own storage objects, the IRootStorage methods (including QueryInterface, IUnknown::AddRef, and IUnknown::Release) must not consume additional memory or file handles.

See Also

IPersistStorage::HandsOffStorage, IPersistStorage::SaveCompleted, IStorage::Commit, IStorage::Stat

Software for developers
Delphi Components
.Net Components
Software for Android Developers
More information resources
Unix Manual Pages
Delphi Examples
Databases for Amazon shops developers
Amazon Categories Database
Browse Nodes Database