|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
Structured storage is a useful tool in the software development. It allows us to open a single binary file and section it into several storages (which may be nested). Each storage may have one or more streams, which are used to write and retrieve the program specific information. All this functionality is built around COM objects that MS provides with the Windows OS. We access it via IStorage and IStream interfaces and a few API function calls. This, however, is a tedious job and I decided to write a thin wrapper around these interfaces and API calls. A Brief ExampleThe following code snapshot shows the class in action ...StructuredStorage ss; // // Let's create a file. This also creates the root storage. // ss.CreateFile(L"SSTest.bin"); // // Let's create a storage on the root one. // ss.CreateStorage(L"FirstLevel"); // // Create a stream and write to it // CComPtr Background InformationAt this point I must say that the structure of the class was inspired by the article and code of Andrew Peace. His solution suited me perfectly, but unfortunately, I find it useless (for my specific case, of course) due to following reasons:
Although my solution eliminates the shortcomings above, it adds some new:
Implementation InformationThe class is build around a vector of IStorage objects. (IStorage object == storage, vector of storages == container) The first element of vector represents the root storage and subsequent elements represent sub storages. We can say that the vector of storages represents a path from the root storage to the last storage (the current one). Example:
If the root storage is also the root of the structured file, say "C:\test\StructFile.bin", level 1 is "Level 1", level 2 is "Level 2", ... then the path to the current storage is: "C:\test\StructFile.bin|Level1|Level2|...|LevelN" Vertical char | is used to emphasize the borderline between the storages. Note, that the part of the path "Level1|Level2|...|LevelN" is hidden inside the "StructFile.bin" file. The front and the back of the vector are the most important storages. The former presents the root storage, while the later presents the current storage. Related DocumentationPlease refer to MSDN library and search for IStorage, IStream, StgCreateDocfile, StgOpenStorage, ... for more details.Final RemarksThose who look into theStructuredStorage.h file, will notice
a lot of commented text and funny commands. They are required by the
Doxygen documentation system.
It is a free documentation utility that is able to
generate HTML, HTML help, LaTeX, RTF, ... documents.
I hope you will find the class useful!
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||