Win32 ini配置文件的读写
来源:互联网 发布:昆仑决 知乎 编辑:程序博客网 时间:2024/04/30 12:51
ini配置文件的固定格式都是
[BACK]
BACKSET=3//这种格式方便存储数据,成为一种通用的数据,
这里总结下对ini文件的读写
往[BACK]中的BACKSET键中写值,以int为例
test_ini.WriteInt(L"BACK",L"BACKSET",countbk),test _ini是一个ini文件的读写类,下面是Writeint函数的实现
BOOL CIniFile::WriteInt(LPCTSTR lpSection, LPCTSTR lpKey, int nValue) const
{
TCHAR szValue[DEF_PROFILE_NUM_LEN + 1] = _T("");
_stprintf(szValue, _T("%d"), nValue);
return WriteString(lpSection, lpKey, szValue);
}
BOOL CIniFile::WriteString(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpValue) const
{
if (lpSection == NULL || lpKey == NULL)
return FALSE;
return CeWritePrivateProfileString(lpSection, lpKey, lpValue == NULL ? _T("") : lpValue, m_pszPathName);
}
而最关键的就是CeWritePrivateProfileString(lpSection, lpKey, lpValue == NULL ? _T("") : lpValue, m_pszPathName);函数的实现,说个大概思想吧
打开你所需要的写入的文件,寻找‘[’字符和']'字符。存储中间的字符串和”BACK“比较,找到相等的再找“BACKSET”键值,修改等号后面的数据,具体代码网上有
封装的很好了。
ini文件读取
test_ini.GetInt(L"BACK",L"BACKSET", 0);
int CIniFile::GetInt(LPCTSTR lpSection, LPCTSTR lpKey, int nDefault) const
{
TCHAR sz[DEF_PROFILE_NUM_LEN + 1] = _T("");
GetString(lpSection, lpKey, sz, DEF_PROFILE_NUM_LEN);
return *sz == _T('\0') ? nDefault : int(_tcstoul(sz, NULL, 10));
}
DWORD CIniFile::GetString(LPCTSTR lpSection, LPCTSTR lpKey, LPTSTR lpBuffer, DWORD dwBufSize, LPCTSTR lpDefault) const
{
if (lpBuffer != NULL)
*lpBuffer = _T('\0');
LPTSTR psz = __GetStringDynamic(lpSection, lpKey, lpDefault);
DWORD dwLen = _tcslen(psz);
if (lpBuffer != NULL)
{
_tcsncpy(lpBuffer, psz, dwBufSize);
dwLen = min(dwLen, dwBufSize);
}
delete [] psz;
return dwLen;
}
LPTSTR CIniFile::__GetStringDynamic(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpDefault) const
{
TCHAR* psz = NULL;
if (lpSection == NULL || lpKey == NULL)
{
// Invalid section or key name, just return the default string
if (lpDefault == NULL)
{
// Empty string
psz = new TCHAR[1];
*psz = _T('\0');
}
else
{
psz = new TCHAR[_tcslen(lpDefault) + 1];
_tcscpy(psz, lpDefault);
}
return psz;
}
// Keep enlarging the buffer size until being certain on that the string we
// retrieved was original(not truncated).
DWORD dwLen = DEF_PROFILE_THRESHOLD;
psz = new TCHAR[dwLen + 1];
DWORD dwCopied = CeGetPrivateProfileString(lpSection, lpKey, lpDefault == NULL ? _T("") : lpDefault, psz, dwLen, m_pszPathName);
while (dwCopied + 1 >= dwLen)
{
dwLen += DEF_PROFILE_THRESHOLD;
delete [] psz;
psz = new TCHAR[dwLen + 1];
dwCopied = CeGetPrivateProfileString(lpSection, lpKey, lpDefault == NULL ? _T("") : lpDefault, psz, dwLen, m_pszPathName);
}
return psz; // !!! Requires the caller to free this memory !!!
}
添加了IniFile头文件后,调用过程就比较简单了
CStdString 也可以写了
FILE *stream;
stream = _wfopen(GPSPATH, _T("w+"));
if(stream == NULL)
return;
else
{
CIniFile IniFile;
IniFile.SetPathName(GPSPATH);
printf("MoveFolder::tmpPath = %ls\n",tmpPath);
IniFile.WriteString(L"MAP", L"MapPath", (LPCTSTR)tmpPath);
}
读取CStdString
BOOL bRet = FALSE;
FILE *stream;
stream = _wfopen(GPSPATH, _T("r"));
if(stream == NULL)
bRet = FALSE;
else
{
CIniFile IniFile;
IniFile.SetPathName(GPSPATH);
TCHAR str[MAX_PATH+1] = _T("");
IniFile.GetString(L"MAP",L"MapPath", str, MAX_PATH);
}
注意定义的时候一定要将MAX_PATH+1.
- Win32 ini配置文件的读写
- 读写ini配置文件的模块
- VC配置文件ini的读写
- VC配置文件ini的读写
- VC配置文件ini的读写
- VC配置文件ini的读写
- VC配置文件ini的读写
- Win32实现INI文件的读写
- win32 读写 ini 文件
- 读写INI配置文件的Java类
- 2个读写ini配置文件的函数
- VC配置文件ini的读写(转载)
- Autohotkey的配置文件读写方法ini
- bcb 读写ini 配置文件的一个例子
- 用于读写 INI 配置文件的 C++ 类
- VC配置文件ini的读写(转载)
- INI配置文件在linux下的读写
- C#对ini配置文件的读写
- Android SDK 模拟器 快捷键 (模拟 旋转屏幕 轨迹球等)
- Word中插入公式后行距变宽的解决
- [OpenGL ES 05]相对空间变换及颜色
- 页面载入动画(loading)
- 酒桌上IT笑话
- Win32 ini配置文件的读写
- C语言解释器-9 控制结构之if
- 用户体验就是感觉
- Spinner的两种调用数据放式
- SAX,功能强大的API
- php读取大文件,后多少行的数据
- A. Petr and Book
- pig Latin 开发 环境 工具 eclipse
- 产品的发展趋势—让人类充满幸福感的产品