C++ 读写INI文件
发布网友
发布时间:2022-04-23 22:50
我来回答
共2个回答
热心网友
时间:2023-10-12 17:51
给你做个例子,挺长的,我也不多解释,你自己看看学习吧:
你可以自己创建一个test.ini文件, 写入以下内容做测试:
[Application]
Key=my key
代码如下:
#include <stdio.h>
#include <string.h>
#include <conio.h>
int GetINIData(const char *szApp,const char *szKey,
const char *szDefault,
char *szOut,const int nOut,
const char *szFileName)
{
if (!szApp||!szKey||!szOut||!szFileName) return -1;
if (szDefault)
strncpy(szOut,szDefault,nOut);
else
*szOut=0;
FILE *hFile;
hFile=fopen(szFileName,"r");
if (!hFile) return -1;
const int BUFFER_SIZE=1024;
char szHeadApp[256];
char szBuffer[BUFFER_SIZE]={0};
int nResult=-1;
_snprintf(szHeadApp,sizeof(szHeadApp),"[%s]",szApp);
//search app
while (!feof(hFile))
{
if (fgets(szBuffer,BUFFER_SIZE,hFile))
{
if (szBuffer[strlen(szBuffer)-1]=='\n')
szBuffer[strlen(szBuffer)-1]=0;
if (strcmp(szBuffer,szHeadApp)==0) break;
}
else
goto FUNC_EXIT;
}
//search for key
while (!feof(hFile))
{
if (fgets(szBuffer,BUFFER_SIZE,hFile))
{
char *szEqual=strstr(szBuffer,"=");
if (szEqual)
{
*szEqual=0;
if (strcmp(szBuffer,szKey)==0)
{
szEqual++;
while (*szEqual==' ') szEqual++;
strncpy(szOut,szEqual,nOut);
nResult=0;
}
}
}
else goto FUNC_EXIT;
}
FUNC_EXIT:
fclose(hFile);
return nResult;
}
int main(void)
{
char szOut[256];
GetINIData("Application","Key","default var",szOut,sizeof(szOut),"test.ini");
printf("data: %s\n",szOut);
getch();
return 0;
}
热心网友
时间:2023-10-12 17:51
如果不涉及跨平台的话,仅在Windows平台上有Windows API可以直接调用
读取
GetPrivateProfileString
DWORD WINAPI GetPrivateProfileString(
__in LPCTSTR lpAppName, //程序名,即[]中的字符串
__in LPCTSTR lpKeyName, //关键字,即等号前的字符串
__in LPCTSTR lpDefault, //如果查询项为空,默认返回的值
__out LPTSTR lpReturnedString, //用于返回值的缓冲区
__in DWORD nSize, //返回缓冲区的大小
__in LPCTSTR lpFileName //文件名
);
写入的话
BOOL WINAPI WritePrivateProfileString(
__in LPCTSTR lpAppName,
__in LPCTSTR lpKeyName,
__in LPCTSTR lpString,
__in LPCTSTR lpFileName
);
参数可参上