首页
社区
课程
招聘
API中没找到修改INI文件区段名字的函数,自己写了一个,请不吝指教。
发表于: 2011-5-25 20:35 3272

API中没找到修改INI文件区段名字的函数,自己写了一个,请不吝指教。

2011-5-25 20:35
3272
API中没有修改INI区段名字的函数
自己写了一个
比如:
INI文件:
[file1]
path=c:\1.txt
kind=a
time=b
[file4]
path=d:\2.exe
kind=c
time=d
[file7]
path=d:\3.exe
kind=e
time=f
[file14]
path=d:\4.exe
kind=g
time=h
[file15]
path=d:\5.exe
kind=i
time=j
[file26]
path=d:\6.exe
kind=k
time=l

之所以会出现上面的区段名字不连续,就是因为可以删除某个区段(自己最近写的文件(夹)加密解密中就用到了,比如上面配置文件可以用来表示处于加密状态的文件或文件夹,删除之后区段名就可能不连续了,而要把这个配置文件的内容读取到LISTVIEW控件中,函数是从头到尾读取的,因此需要把配置文件再次区段名连续起来)
要求很简单,把区段名字连起来,内容不变

效果
[file1]
path=c:\1.txt
kind=a
time=b
[file2]
path=d:\2.exe
kind=c
time=d
[file3]
path=d:\3.exe
kind=e
time=f
[file4]
path=d:\4.exe
kind=g
time=h
[file5]
path=d:\5.exe
kind=i
time=j
[file6]
path=d:\6.exe
kind=k
time=l

函数:
void RepairInitFileSectionName(TCHAR *szInitFilePath)
{
DWORD i_Ret;
INT i=0;
INT j=0;
INT nFlag=0;//这个表示当前配置文件中区段的总数(也就是目前处于加密状态的文件或文件夹总个数,这个例子假如为6个)
TCHAR i_section[MAX_PATH]={0};
TCHAR j_section[MAX_PATH]={0};
TCHAR path_value[MAX_PATH]={0};
TCHAR kind_value[MAX_PATH]={0};
TCHAR time_value[MAX_PATH]={0};
do
{
wsprintf(i_section,TEXT("file%d"),i+1);
i_Ret=GetPrivateProfileString(i_section,TEXT("path"),NULL,path_value,sizeof(path_value),szInitFilePath);
if((i_Ret==0)&&(nFlag<6))
{
//读取的内容为空且项数不够则需要继续读取下面的区段
for(j=i+1;nFlag<6;j++)
{
//继续读取下一个区段
wsprintf(j_section,TEXT("file%d"),j+1);
i_Ret=GetPrivateProfileString(j_section,TEXT("path"),NULL,path_value,sizeof(path_value),szInitFilePath);
if(i_Ret==0)
{
continue;//如果为空,进入下次
}
else
{
//说明读取到了内容
//需要把内容放到filei区段中
WritePrivateProfileString(i_section,TEXT("path"),path_value,szInitFilePath);
GetPrivateProfileString(j_section,TEXT("kind"),NULL,kind_value,sizeof(kind_value),szInitFilePath);
WritePrivateProfileString(i_section,TEXT("kind"),kind_value,szInitFilePath);
GetPrivateProfileString(j_section,TEXT("time"),NULL,time_value,sizeof(time_value),szInitFilePath);
WritePrivateProfileString(i_section,TEXT("time"),time_value,szInitFilePath);
//写完之后需要删除原来的区段
WritePrivateProfileString(j_section,NULL,NULL,szInitFilePath);
//写完之后对i进行++
i++;
nFlag++;
break;
}

}
}
else
{
i++;
nFlag++;
}
}while(nFlag<=6);
}

void main()
{
RepairInitFileSectionName(TEXT("c:\\test.ini"));
}

欢迎交流。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//