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

  • Live Event Date: April 22, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT Database professionals — whether developers or DBAs — can often save valuable time by learning to get the most from their new or existing productivity tools. Whether you're responsible for managing database projects, performing database health checks and reporting, analyzing code, or measuring software engineering metrics, it's likely you're not taking advantage of some of the lesser-known features of Toad from Dell. Attend this live …

  • Today's competitive marketplace requires the organization to frequently release and deploy applications at the pace of user demands, with reduced cost, risk, and increased quality. This book defines the basics of application release and deployment, and provides best practices for implementation with resources for a deeper dive. Inside you will find: The business and technical drivers behind automated application release and deployment. Evaluation guides for application release and deployment solutions. …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds