IStorage - Compound File Implementation
The compound file implementation of IStorage allows you to create and
manage substorages and streams within a storage object residing in a compound
file object. To create a compound file object and get an IStorage
pointer, call the API function
StgCreateDocfile. To open an existing compound
file object and get its root IStorage pointer, call
StgOpenStorage.
When to Use
Most applications use this implementation to to create and manage storages and
streams.
Remarks
-
IStorage::CreateStream
-
Creates and opens a stream object with the specified name contained in this
storage object. The OLE-provided compound file implementation of the IStorage::CreateStream
method does not support the following behaviors:
-
The STGM_DELETEONRELEASE flag is not supported.
-
Transacted mode is not supported for stream objects.
-
Opening the same stream more than once from the same storage is not supported.
The STGM_SHARE_EXCLUSIVE flag must be specified.
-
IStorage::OpenStream
-
Opens an existing stream object within in this storage object using the
specified access modes specified in the grfMode parameter. The OLE-provided
compound file implementation of the IStorage::OpenStream method does
not support the following behavior:
-
The STGM_DELETEONRELEASE flag is not supported.
-
Transacted mode is not supported for stream objects.
-
Opening the same stream more than once from the same storage is not supported.
The STGM_SHARE_EXCLUSIVE flag must be specified.
-
IStorage::CreateStorage
-
The OLE-provided compound file implementation of the IStorage::CreateStorage
method does not support the STGM_DELETEONRELEASE flag. Specifying this flag
causes the method to return STG_E_INVALIDFLAG.
-
IStorage::OpenStorage
-
Opens an existing storage object with the specified name in the specified
access mode. The OLE-provided compound file implementation of the IStorage::OpenStorage
method does not support the following behavior:
-
The STGM_PRIORITY flag is not supported for non-root storages.
-
Opening the same storage object more than once from the same parent storage is
not supported. The STGM_SHARE_EXCLUSIVE flag must be specified.
-
The STGM_DELETEONRELEASE flag is not supported. If this flag is specified, the
function returns STG_E_INVALIDFUNCTION.
-
IStorage::CopyTo
-
Copies only the substorages and streams of this open storage object into
another storage object. The rgiidExclude parameter can be set to
IID_IStream to copy only substorages, or to IID_IStorage to copy only streams.
-
IStorage::MoveElementTo
-
Copies or moves a substorage or stream from this storage object to another
storage object.
-
IStorage::Commit
-
Ensures that any changes made to a storage object open in transacted mode are
reflected in the parent storage; for a root storage, reflects the changes in
the actual device, for example, a file on disk. For a root storage object
opened in direct mode, this method has no effect except to flush all memory
buffers to the disk. For non-root storage objects in direct mode, this method
has no effect.
The OLE-provided compound files implementation uses a two phase commit process
unless STGC_OVERWRITE is specified in the grfCommitFlags parameter.
This two-phase process ensures the robustness of data in case the commit
operation fails. First, all new data is written to unused space in the
underlying file. If necessary, new space is allocated to the file. Once this
step has been successfully completed, a table in the file is updated using a
single sector write to indicate that the new data is to be used in place of
the old. The old data becomes free space to be used at the next commit. Thus,
the old data is available and can be restored in case an error occurs when
committing changes. If STGC_OVERWRITE is specified, a single phase commit
operation is used.
-
IStorage::Revert
-
Discards all changes that have been made to the storage object since the last
commit.
-
IStorage::EnumElements
-
Creates and retrieves a pointer to an enumerator object that can be used to
enumerate the storage and stream objects contained within this storage
object.The OLE-provided compound file implementation takes a snapshot.
-
IStorage::DestroyElement
-
Removes the specified element (substorage or stream) from this storage object.
-
IStorage::RenameElement
-
Renames the specified substorage or stream in this storage object.
-
IStorage::SetElementTimes
-
Sets the modification, access, and creation times of the specified storage
element. The OLE-provided compound file implementation maintains modification
and change times for internal storage objects. For root storage objects,
whatever is supported by the underlying file system (or
ILockBytes) is supported. The compound file
implementation does not maintain any time stamps for internal streams.
Unsupported time stamps are reported as zero, enabling the caller to test for
support.
-
IStorage::SetClass
-
Assigns the specified CLSID to this storage object.
-
IStorage::SetStateBits
-
Stores up to 32 bits of state information in this storage object. The state
set by this method is for external use only. The OLE-provided compound file
implementation does not perform any action based on the state.
-
IStorage::Stat
-
Retrieves the STATSTG structure for this open storage
object.
See Also
IStorage, IStream,
StgCreateDocfile,
StgOpenStorage,
IFillLockBytes,
ILockBytes,
IRootStorage