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.
Comments
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
				
- 
				MegaDetailed.Net
 Unix Manual Pages
 Delphi Examples