Mapped File Class

-->

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);

Download source - 4 KB



Comments

  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Who can you trust? Learn from the IBM X-Force team in this new quarterly report how the Internet of Things and IP reputation tracking are transforming the security landscape.

  • With the average hard drive now averaging one terabyte in size, the fallout from the explosion of user-created data has become an overwhelming volume of potential evidence that law-enforcement and corporate investigators spend countless hours examining. Join Us and SANS' Rob Lee for our 45-minute webinar, A Triage and Collection Strategy for Time-Sensitive Investigations, will demonstrate how to: Identify the folders and files that often contain key insights Reduce the time spent sifting through content by …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date