Configure file like format of ini and read data from ini file or write data to ini file

本文介绍如何利用Win32 API中的函数来读取和写入配置文件,确保应用程序数据即使在内存释放后也能持久保存。通过具体代码示例展示了如何将登录信息和语言设置等数据存储到INI文件中。

    Sometimes,It's not that always store data in memory, you should store data to disk file,  because you release memory and destroy address of data  that

allocated to data previously when main thread procedure is destroyed.The data will be lost in memeroy.But you will use data that store in memory previously to do something.so what are you gonna do? here,I give you a method to store data to configure file as following description.

   First,Let me have a look format of ini file as soon as possible. 

     [section]

       key = value

     .........

     ; comment

  and then,how to use configure file to store data,please look the following win-32 main functions:

  

 BOOL WritePrivateProfileString(
  LPCTSTR lpAppName,   // section name
  LPCTSTR lpKeyName,   // key name
  LPCTSTR lpString,         // string to add
  LPCTSTR lpFileName     // initialization file
);

 DWORD GetPrivateProfileString(
  LPCTSTR lpAppName,        // section name
  LPCTSTR lpKeyName,        // key name
  LPCTSTR lpDefault,        // default string
  LPTSTR lpReturnedString,  // destination buffer
  DWORD nSize,              // size of destination buffer
  LPCTSTR lpFileName        // initialization file name
);

 

UINT GetPrivateProfileInt(
  LPCTSTR lpAppName,  // section name
  LPCTSTR lpKeyName,  // key name
  INT nDefault,       // return value if key name not found
  LPCTSTR lpFileName  // initialization file name
);

 

My code:

 

void CLoginDemoDlg::OnBnClickedConfirm()
{
 // TODO: Add your control notification handler code here
 m_UserID.GetWindowText(m_UserName);
 ::WritePrivateProfileString(_T("LoginInfo"),_T("UserID"),//将登录信息写入配置文件
  m_UserName,ConfigurePath+_T("LoginInfo.ini"));

}

    void CLoginDemoDlg::AddLanguageString()
{
 CString strTemp;
 CString nStr;
 CString SelString[3];
 int nCount = 3;
 SelString[0] = _T("简体中文");
 SelString[1] = _T("繁体中文");
 SelString[2] = _T("English");
 for (int i=0; i<3;i++)
 {
  strTemp.Format(_T("%d"),i);
  ::WritePrivateProfileString(_T("LanguageInfo"),_T("Language")+strTemp,
  SelString[i],ConfigurePath + _T("LanguageSel.ini"));
 }
 nStr.Format(_T("%d"),nCount);
 ::WritePrivateProfileString(_T("CountInfo"),_T("Count"),nStr,
  ConfigurePath + _T("LanguageSel.ini"));

}
void CLoginDemoDlg::GetLanguageFile()                                           

{
 CString buffer;
 CString nStr;
 int nIndex;
 nIndex = ::GetPrivateProfileInt(_T("CountInfo"),_T("Count"),0,
  ConfigurePath + _T("LanguageSel.ini"));
 for (int i=0; i<nIndex; i++)
 {
  nStr.Format(_T("%d"),i);
  ::GetPrivateProfileString(_T("LanguageInfo"),_T("Language")+nStr,NULL,
   buffer.GetBuffer(1024),1024,ConfigurePath + _T("LanguageSel.ini"));
  m_Language.AddString(buffer);
  buffer.ReleaseBuffer();
 }
 m_Language.SetCurSel(0);

}

void CLoginDemoDlg::GetLoginFromFile()
{
 CString  strTemp;
 int nIndex = 0;
 ::GetPrivateProfileString(_T("LoginInfo"),_T("UserID"),
  NULL,strTemp.GetBuffer(1024),1024,ConfigurePath + _T("LoginInfo.ini"));
 nIndex = m_UserID.AddString(strTemp);
 m_UserID.SetCurSel(nIndex);
 strTemp.ReleaseBuffer();
}

### 解决 espeak-ng 提示 'espeak-ng-data/phontab No such file or directory' 错误 当遇到 `'espeak-ng-data/phontab No such file or directory'` 的错误时,这通常表明 espeak-ng 数据文件未正确安装或路径配置有问题。以下是详细的解决方案: #### 1. **确认数据文件的位置** 确保 `espeak-ng-data` 已经正确安装到系统中,并且其路径已被正确识别。默认情况下,该目录应位于 `/usr/share/espeak-ng-data/` 或者您在编译过程中指定的前缀路径下的 `share/` 子目录中[^1]。 可以通过以下命令检查是否存在所需的数据文件: ```bash ls /usr/share/espeak-ng-data/phontab ``` 如果返回为空或找不到文件,则表示数据文件缺失。 #### 2. **重新安装 espeak-ng 和数据包** 有时,单独安装 espeak-ng 并不会自动附带完整的语音数据包。因此需要手动下载并安装最新的 `espeak-ng-data` 包。例如,在基于 Debian 的系统上运行以下命令来更新软件包: ```bash sudo apt-get update && sudo apt-get install --reinstall espeak-ng-data ``` 对于源码编译的情况,建议删除旧版残留的数据后再重新编译整个项目。操作如下: ```bash rm -rf /path/to/existing/espeak-data/ cd /path/to/espeak-ng/source/ make clean ./configure --prefix=/usr make sudo make install ``` #### 3. **设置环境变量** 某些时候即使已经完成了上述步骤仍会出现同样的问题,那可能是由于程序无法定位到正确的资源位置所致。这时可通过设定 LD_LIBRARY_PATH 和 ESPEAKNG_DATA_PATH 这两个重要环境变量来帮助应用找到它们所需要的库与资料夹。 ```bash export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH export ESPEAKNG_DATA_PATH=/usr/share/espeak-ng-data/ ``` 之后再次尝试调用 espeak-ng 功能看是否恢复正常工作状态。 #### 4. **验证修复情况** 完成前面提到的所有修正措施后,应该重新启动终端窗口以使更改生效,接着可以用下面这个简单例子来进行最终检验: ```bash espeak-ng -v en "This is a test message." ``` 假如一切顺利的话就不会再碰到缺少 phontab 文件之类的警告信息了[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值