📄 skyrainreg.cpp
字号:
//※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
//※ ※
//※ 文件名:SkyRainReg.cpp ※
//※ ※
//※ 天雨注册表数据结构实现程序代码 ※
//※ ※
//※ 版权所有:赵天雨 zxphxh@163.com 2003 - 2006 ※
//※ ※
//※ Version :2.0.060215 ※
//※ ※
//※ 最后修改日期:2005.11.25 -- 2006.02.15 ※
//※ ※
//※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
//---------------------------------------------------------------------------
#pragma once
#include "stdafx.h"
#include "SkyRainReg.h"
//---------------------------------------------------------------------------
#pragma comment(lib, "shlwapi.lib")
//---------------------------------------------------------------------------
void ShowMsg(PSTRTYPE Msg)
{
MessageBoxA(NULL, Msg, "调试提示", 0);
}
//---------------------------------------------------------------------------
void ShowMsg(int a)
{
STRTYPE Buff[256];
itoa(a, Buff, 10);
MessageBoxA(NULL, Buff, "调试提示", 0);
}
//---------------------------------------------------------------------------
void StrCopy(PSTRTYPE &Str1, PSTRTYPE Str2)
{ // 说明:创建Str1,并把Str2拷贝到Str1中
if (Str1)
{
delete Str1;
}
int n = StrLen(Str2);
Str1 = new STRTYPE[n+1];
Str1[n] = '\0';
_tcscpy(Str1, Str2);
}
//---------------------------------------------------------------------------
int AnsiPos(PSTRTYPE S, STRTYPE C)
{ // 在字符串S中查找字符C第一次出现的位置,并返回该位置的序号。
// 如果S中第一个字符即是C,则返回0;如果第二个字符为C,则返回1;...
// 如果S中根本就没有C,则返回-1。
int nLen = StrLen(S);
for (int i=0; i<nLen; i++)
{
if (S[i] == C)
{
return i;
}
}
return -1;
}
//---------------------------------------------------------------------------
void StrNCopy(PSTRTYPE Dest, PSTRTYPE Source, int n)
{ // 从源字符串Surce的第一个字符开始拷贝n个字符到目标字符串Dest中
// 2006.02.19
if (!Dest || !Source || n==0)
{
return;
}
int i=0, m = StrLen(Dest), k = StrLen(Source);
for (i=0; i<n && i<m && i<k; i++)
{
Dest[i] = Source[i];
}
Dest[i] = '\0';
}
//---------------------------------------------------------------------------
void StrStartEndCopy(PSTRTYPE &Dest, PSTRTYPE Source, int Start, int End)
{ // 从源字符串Surce的第Start个字符开始到End结束拷贝End-Start个字符到
// 目标字符串Dest中,如:
// Surce : ABCDEFG Strat = 2, End = 5
// 则拷贝后Dest为:CDE
// 2006.02.19
if (!Dest || !Source || End<Start)
{
return;
}
int i=0;
PSTRTYPE temp = new STRTYPE[End-Start+1];
temp[End-Start]='\0';
for (i=0; i<End-Start; i++)
{
temp[i] = Source[i+Start];
}
temp[i] = '\0';
Dest = temp;
}
//---------------------------------------------------------------------------
/****************************************************************************
* *
* 函数名称:CSkyRainReg *
* *
* 隶属对象:CSkyRainReg : public *
* *
* 用 法:CSkyRainReg(LPTSTR AFileName) *
* *
* 实现功能:构造函数进行数据成员初始化,创造根结点 *
* *
* 参数说明:AFileName 天雨注册表文件名 包括全路径名 *
* *
* 返 回 值:无 *
* *
* 日 期:2006.02.15 *
* *
****************************************************************************/
CSkyRainReg::CSkyRainReg(PSTRTYPE AFileName)
{
Root = NULL;
FileName = NULL;
NewValue = NULL;
CreateRoot();
StrCopy(FileName, AFileName);
// 如果指定的文件不存在则利用Save()方法创建一个新的文件
// 并进行天雨注册表初始化
if (LoadFromFile(FileName) == lfaFileNotExist)
{
// 文件不存在,利用Save()创建一个新的文件
Save();
}
}
//---------------------------------------------------------------------------
/****************************************************************************
* *
* 函数名称:~CSkyRainReg *
* *
* 隶属对象:CSkyRainReg : public *
* *
* 用 法:~CSkyRainReg() *
* *
* 实现功能:析构造函数释放数据成员所占据的空间 *
* *
* 参数说明:无 *
* *
* 返 回 值:无 *
* *
* 日 期:2006.02.15 *
* *
****************************************************************************/
CSkyRainReg::~CSkyRainReg(void)
{
// 删除二叉树链表中的所有结点
OpenKeyPtr = NULL;
DeleteBiTreeNode(Root->SubKey);
}
//---------------------------------------------------------------------------
/****************************************************************************
* *
* 函数名称:CreateRoot *
* *
* 隶属对象:CSkyRainReg : private *
* *
* 用 法:bool CreateRoot(void) *
* *
* 实现功能:创建二叉树的根结点 *
* *
* 参数说明:无 *
* *
* 返 回 值:若创建二叉树的根结点Root成功则返回TRUE,否则返回FALSE *
* *
* 日 期:2006.02.15 *
* *
****************************************************************************/
bool CSkyRainReg::CreateRoot(void)
{
if (Root != NULL)
{
DestoryRoot();
}
Root = new REGKEY; // 创建一个新的根结点
if (Root == NULL) // 内存不足,不能进行创建操作
{
return FALSE;
}
Root->Name = MAIN_ROOT_KEY_NAME;
Root->Info = new SkyRain::CNodeInfo;
Root->Info->cFlag = hsnHAVE; // 表示有子树结点
OpenKeyPtr = Root; // 当前指针
return TRUE;
}
//---------------------------------------------------------------------------
/****************************************************************************
* *
* 函数名称:DestoryRoot *
* *
* 隶属对象:CSkyRainReg : private *
* *
* 用 法:void DestoryRoot(void) *
* *
* 实现功能:销毁二叉树的根结点 *
* *
* 参数说明:无 *
* *
* 返 回 值:无 *
* *
* 日 期:2003.12.16 -- 2006.02.15 *
* *
****************************************************************************/
void CSkyRainReg::DestoryRoot(void)
{
if (Root != NULL)
{
delete Root;
Root = NULL;
}
}
//---------------------------------------------------------------------------
/****************************************************************************
* *
* 函数名称:GetSubKeyCount *
* *
* 隶属对象:CSkyRainReg : public *
* *
* 用 法:int GetSubKeyCount(void) *
* *
* 实现功能:返回当前主键第一层中的子主键的个数 *
* *
* 参数说明:无 *
* *
* 返 回 值:返回当前主键的子主键的个数 *
* *
* 日 期:2006.01.27 -- 2006.02.15 *
* *
****************************************************************************/
int CSkyRainReg::GetSubKeyCount(void)
{
int i=0;
PREGKEY pNode = OpenKeyPtr->SubKey;
while (pNode)
{
i++;
pNode = pNode->SibKey;
}
return i;
}
//---------------------------------------------------------------------------
/****************************************************************************
* *
* 函数名称:GetDataValueCount *
* *
* 隶属对象:CSkyRainReg : public *
* *
* 用 法:int GetDataValueCount(void) *
* *
* 实现功能:返回当前主键中的键值的个数 *
* *
* 参数说明:无 *
* *
* 返 回 值:返回当前主键中的键值的个数 *
* *
* 日 期:2003.12.16 -- 2006.02.15 *
* *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -