–>
CMappedFile was created after some users complained that my apps were
storing too much data in the Registry. I needed a way to preserve the
multilevel data heirarchy that the Registry provides, but I needed to
do it in external files. In addition, I wanted some protection from
curious eyes.
CMappedFile is essentially a CMap of COleVariants that will serialize
itself to and from files. It supports long, bool,
LPCSTR and double. But, because you
can cast just about any basic type into a long,
you can store just about anything. Plus, it should be fairly simple to
extend this class to hold anything a COleVariant can hold.
To provide key support, three functions, SetBaseKey,
SetSubKey and MoveUp
are provided.
- SetBaseKey(key) allows you to set
the root key for all
subsequent read and write operations. -
SetSubKey(subKey) moves the current key
“down” to the specified subkey. -
MoveUp() moves the current key “up” to the
parent key.
The following example write five values to a CMappedFile, in two different
keys, and writes the file. Then, it reads the file back into a different
CMappedFile and verifies the results. Pretty simple.
// stupid data values double pi = 3.14159; CString hi = "Hi There!"; long fiftyFive = 55; bool thisWorks = true; bool thisDoesNotWork = false; CMappedFile mf; // start off with a key called "Root" mf.SetBaseKey("Root"); // Root\Pi : 3.14159 mf.Set("Pi", pi); // Root\Hi : Hi There! mf.Set("Hi", hi); // move down a subkey mf.SetSubKey("Subkey"); // Root\Subkey\Success : true mf.Set("Success", thisWorks); // Root\Subkey\55 : 55 mf.Set("55", fiftyFive); mf.MoveUp(); // Root\Failure : false mf.Set("Failure", thisDoesNotWork); // dump this to the debug output window mf.Dump(); // save it to a file mf.Write("test.mf"); // "test.mf" now holds the following values : // Root\Pi : 3.14159 // Root\Hi : Hi There! // Root\Subkey\55 : 55 // Root\Subkey\Success : true // Root\Failure : false // read it back, to a different CMappedFile, to be safe CMappedFile mf2; mf2.Read("test.mf"); mf2.SetBaseKey("Root"); ASSERT(mf2.Get("Hi", "Bye") == hi); ASSERT(mf2.Get("Pi", -1.0) == pi); mf2.SetSubKey("Subkey"); ASSERT(mf2.Get("55", (long)-1) == fiftyFive); ASSERT(mf2.Get("Success", false) == true); mf2.MoveUp(); ASSERT(mf2.Get("Failure", true) == false);