IStorage
The IStorage
interface supports the creation and management of structured storage objects.
Structured storage allows hierarchical storage of information within a single
file, and is often referred to as a
file system within a file . Elements of a structured storage object are storages
and streams. Storages are analogous to directories, and streams are analogous
to files. Within a structured storage there will be a primary storage object
that may contain substorages, possibly nested, and streams. Storages provide
the structure of the object, and streams contain the data, which is manipulated
through the IStream
The IStorage
interface provides methods for creating and managing the root storage object,
child storage objects, and stream objects. These methods can create, open,
enumerate, move, copy, rename, or delete the elements in the storage object.
An
application must release its IStorage pointers when it is done with the
storage object to deallocate memory used. There are also methods for changing
the date and time of an element.
There are a
number of different modes in which a storage object and its elements can be
opened, determined by setting values from the STGM
Other methods
provide a means to gain access to information about a storage object and its
elements through the STATSTG
When to Implement
Generally,
you would not implement this interface unless you were defining a new storage
scheme for your system. OLE provides a compound file implementation of the IStorage
interface that supports transacted access. OLE provides a set of helper APIs to
facilitate using the compound file implementation of storage objects. Refer to IStorage
- Compound File Implementation
When to Use
Call the
methods of IStorage to manage substorages or streams within the current
storage. This management includes creating, opening, or destroying sub-storages
or streams, as well as managing aspects such as time stamps, names, etc. You
can also commit changes or revert to previous version for storages opened in
transacted mode. The methods of IStorage do not include means to read
and write data this is
reserved for IStream, which manages the actual data. While the IStorage
and IStream
Methods VTable Order
IUnknown Methods |
Description |
QueryInterface |
Returns
pointers to supported interfaces. |
AddRef |
Increments
the reference count. |
Release |
Decrements
the reference count. |
IStorage
Methods |
Description |
CreateStream |
Creates and
opens a stream object with the specified name contained in this storage
object. |
OpenStream |
Opens an
existing stream object within this storage object using the specified access
permissions in grfMode. |
CreateStorage |
Creates and
opens a new storage object within this storage object. |
OpenStorage |
Opens an
existing storage object with the specified name according to the specified
access mode. |
CopyTo |
Copies the
entire contents of this open storage object into another storage object. The
layout of the destination storage object may differ. |
MoveElementTo |
Copies or
moves a substorage or stream from this storage object to another storage
object. |
Commit |
Reflects
changes for a transacted storage object to the parent level. |
Revert |
Discards
all changes that have been made to to the storage object since the last
commit operation. |
EnumElements |
Returns an
enumerator object that can be used to enumerate the storage and stream
objects contained within this storage object. |
DestroyElement |
Removes the
specified storage or stream from this storage object. |
RenameElement |
Renames the
specified storage or stream in this storage object. |
SetElementTimes |
Sets the
modification, access, and creation times of the indicated storage element, if
supported by the underlying file system. |
SetClass |
Assigns the
specified CLSID to this storage object. |
SetStateBits |
Stores up
to 32 bits of state information in this storage object. |
Stat |
Returns the
STATSTG |