-
-
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
欢迎交流。
自己写了一个
比如:
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")); }
欢迎交流。
赞赏
他的文章
看原图
赞赏
雪币:
留言: