MFC C++ 注册表保存/获取数据方法(保存/获取TXT例子)

个人理解注册表的本质也是一个数据库,Windows很多硬件,软件等信息都保存到注册表中,保存到注册表里的数据不易丢失,在保存数据到注册表之前,首先要明白注册表的结构是怎样的

1,注册表结构

MFC C++ 注册表保存/获取数据方法(保存/获取TXT例子)


在开始处输入regedit,选择regedit.exe,打开后看到的就是整个系统的注册表


MFC C++ 注册表保存/获取数据方法(保存/获取TXT例子)MFC C++ 注册表保存/获取数据方法(保存/获取TXT例子)


可以看到有五个文件夹,这五个文件夹分别为:

HKEY_CLASSES_ROOT 存储Windows可识别的文件类型的详细列表,以及相关联的程序。
HKEY_CURRENT_USER 存储当前用户设置的信息。
HKEY_LOCAL_MACHINE 包括安装在计算机上的硬件和软件的信息。
HKEY_USERS 包含使用计算机的用户的信息。
HKEY_CURRENT_CONFIG 这个分支包含计算机当前的硬件配置信息。

一般用户保存应用程序数据都在HKEY_CURRENT_USER中的Software下。

MFC C++ 注册表保存/获取数据方法(保存/获取TXT例子)MFC C++ 注册表保存/获取数据方法(保存/获取TXT例子)MFC C++ 注册表保存/获取数据方法(保存/获取TXT例子)


注册表内结构为:根键,子键,键值。

①根键,一共五个,HKEY_CLASSES_ROOT, HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS和HKEY_CURRENT_CONFIG;

② 子键,子键下可以有多个子键,即文件夹。

③键值,键值表示一个文件,该文件有三个部分:名称,类型,数据。


文件的类型有以下几种:

REG_SZ 字符串 文本字符串 
REG_MULTI_SZ 多字符串 含有多个文本值的字符串 
REG_BINARY 二进制数 二进制值,以十六进制显示。 
REG_DWORD 双字 一个32位的二进制值,显示为8位的十六进制值。


2,保存注册表方法


mfc操作注册表首先要在注册表中注册子键项,

SetRegistryKey(_T("子键项名"));   //注册子键

WriteProfileInt("子键","键值",数据);   //保存到注册表,类型为Int

WriteProfileString("子键", "键值" ,数据); //保存到注册表,类型为String




3,获取注册表方法


 GetProfileString("子键", "键值");

GetProfileInt("子键", "键值",0); //int类型,0表示当获取注册表数据为空时,默认值为0,,可*设置 





下面给出一个例子,保存txt文件路径名保存在注册表并获取

首先,保存到注册表代码如下:

新建一个MFC项目,名为BarCodeMark,

在代码中添加:

SetRegistryKey(_T("Local AppWizard-Generated Applications"));//在注册表中注册一个子键项

void SaveTxtName1();    //声明保存txt文件路径名方法

CString m_strTxtName1;        //定义保存在注册表中的txt文件名

m_strTxtName1 = "C:\\Users\Administrator\Desktop\测试txt\测试码2";

void CMSI_VC_DemoApp::SaveTxtName1()      //定义保存txt文件名函数SaveTxtName() 
{
   WriteProfileString(_T("D_TxtName"), _T("TxtName1"), m_strTxtName1); 
                                                                     //D_TxtName为注册表中键值,
                                                                     //TxtName1为要保存到注册表中的名称

                                                                    //将m_strTxtName赋值给TxtName1



运行后,打开注册表查看

MFC C++ 注册表保存/获取数据方法(保存/获取TXT例子)

MFC C++ 注册表保存/获取数据方法(保存/获取TXT例子)


①注册的子键名

②子键,MFC项目名

③键值


可以看到文件路径名已经保存到注册表中键值D_TxtName中了,结构为

名称:TxtName1

类型:REG_SZ 字符串

数据:C:\\Users\Administrator\Desktop\测试txt\测试码2


获取注册表数据代码如下:


m_strTxtName1 =  GetProfileString(_T("D_TxtName"), _T("TxtName1")); //获取txt文件名




-------------------------------------------------------------END-----------------------------------------------------------------------------