C语言实现 读取写入ini文件实现(转)
#include <stdio.h>
#include <string.h> /*
* 函数名: GetIniKeyString
* 入口参数: title
* 配置文件中一组数据的标识
* key
* 这组数据中要读出的值的标识
* filename
* 要读取的文件路径
* 返回值: 找到需要查的值则返回正确结果
* 否则返回NULL
*/
char *GetIniKeyString(char *title,char *key,char *filename)
{
FILE *fp;
int flag = ;
char sTitle[], *wTmp;
static char sLine[]; sprintf(sTitle, "[%s]", title);
if(NULL == (fp = fopen(filename, "r"))) {
perror("fopen");
return NULL;
} while (NULL != fgets(sLine, , fp)) {
// 这是注释行
if ( == strncmp("//", sLine, )) continue;
if ('#' == sLine[]) continue; wTmp = strchr(sLine, '=');
if ((NULL != wTmp) && ( == flag)) {
if ( == strncmp(key, sLine, wTmp-sLine)) { // 长度依文件读取的为准
sLine[strlen(sLine) - ] = '\0';
fclose(fp);
return wTmp + ;
}
} else {
if ( == strncmp(sTitle, sLine, strlen(sLine) - )) { // 长度依文件读取的为准
flag = ; // 找到标题位置
}
}
}
fclose(fp);
return NULL;
} /*
* 函数名: GetIniKeyInt
* 入口参数: title
* 配置文件中一组数据的标识
* key
* 这组数据中要读出的值的标识
* filename
* 要读取的文件路径
* 返回值: 找到需要查的值则返回正确结果
* 否则返回NULL
*/
int GetIniKeyInt(char *title,char *key,char *filename)
{
return atoi(GetIniKeyString(title, key, filename));
} /*
* 函数名: PutIniKeyString
* 入口参数: title
* 配置文件中一组数据的标识
* key
* 这组数据中要读出的值的标识
* val
* 更改后的值
* filename
* 要读取的文件路径
* 返回值: 成功返回 0
* 否则返回 -1
*/
int PutIniKeyString(char *title,char *key,char *val,char *filename)
{
FILE *fpr, *fpw;
int flag = ;
char sLine[], sTitle[], *wTmp; sprintf(sTitle, "[%s]", title);
if (NULL == (fpr = fopen(filename, "r")))
PRN_ERRMSG_RETURN("fopen");// 读取原文件
sprintf(sLine, "%s.tmp", filename);
if (NULL == (fpw = fopen(sLine, "w")))
PRN_ERRMSG_RETURN("fopen");// 写入临时文件 while (NULL != fgets(sLine, , fpr)) {
if ( != flag) { // 如果找到要修改的那一行,则不会执行内部的操作
wTmp = strchr(sLine, '=');
if ((NULL != wTmp) && ( == flag)) {
if ( == strncmp(key, sLine, wTmp-sLine)) { // 长度依文件读取的为准
flag = ;// 更改值,方便写入文件
sprintf(wTmp + , "%s\n", val);
}
} else {
if ( == strncmp(sTitle, sLine, strlen(sLine) - )) { // 长度依文件读取的为准
flag = ; // 找到标题位置
}
}
} fputs(sLine, fpw); // 写入临时文件
}
fclose(fpr);
fclose(fpw); sprintf(sLine, "%s.tmp", filename);
return rename(sLine, filename);// 将临时文件更新到原文件
} /*
* 函数名: PutIniKeyString
* 入口参数: title
* 配置文件中一组数据的标识
* key
* 这组数据中要读出的值的标识
* val
* 更改后的值
* filename
* 要读取的文件路径
* 返回值: 成功返回 0
* 否则返回 -1
*/
int PutIniKeyInt(char *title,char *key,int val,char *filename)
{
char sVal[];
sprintf(sVal, "%d", val);
return PutIniKeyString(title, key, sVal, filename);
} int main(int argc,char *argv[])
{
printf("%s\n", GetIniKeyString("DOG", "name", "config.ini"));
printf("%d\n", GetIniKeyInt("DOG", "age", "config.ini"));
PutIniKeyString("CAT", "name", "ccc", "config.ini");
PutIniKeyInt("DOG", "age", , "config.ini");
return ;
}
这是我自己创建的一个config.ini文件
#[CAT]
[CAT]
//name=dsfdsf
age=34
name=aaa
name1=ooo
//[DOG]
[DOG]
name=bbb
name1=xxx
age=25
当运行程序后。结果为:
25
最后config.ini文件变为:
[CAT]
//name=dsfdsf
age=34
name=ccc
name1=ooo
//[DOG]
[DOG]
name=bbb
name1=xxx
age=56
C语言实现 读取写入ini文件实现(转)的更多相关文章
- 【WPS】表格使用VBA宏编程写入ini文件实现软件多语言
前言:公司软件最近在做多语言版本,而又来一个西班牙文版本的,之前已经做过中文版本,英文版本和法文版本,之前是同事做的,现在安排我做,之前的做法,使用wps表格,翻译好,然后一个一个复制粘贴到ini文件 ...
- MFC写入.ini文件的策略
在使用WritePrivateProfileString的时候, 如果前两个参数已经在INI文件中存在,那该函数的作用就是修改键值,即楼主说的覆盖 如果第一个参数存在,第二个参数不存在,那作用是在IN ...
- boost::property_tree读取解析ini文件--推荐
boost::property_tree读取解析ini文件 #include "stdafx.h" #include <iostream> #include <b ...
- C语言实现<读取>和<写入> *.ini文件(转)
原地址:https://blog.csdn.net/niha1993825jian/article/details/41086403 #include <stdio.h> #include ...
- 用C#读取,写入ini文件
[DllImport("kernel32.dll")] private static extern bool WritePrivateProfileString(string se ...
- C语言读取写入CSV文件 [一]基础篇
本系列文章目录 [一] 基础篇 [二] 进阶篇--写入CSV [三] 进阶篇--读取CSV 什么是CSV? CSV 是一种以纯文本形式存储的表格数据,具体介绍如下(来自维基百科): 逗号分隔值(Com ...
- C#中选中指定文件并读取类似ini文件的内容
一.背景 由于项目中需要去读取设备的配置信息,配置文件的内容和INI配置文件的格式类似,所以可以按照INI文件的方式来处理.涉及如何打开一个文件,获取打开的文件的路径问题,并读取选中的文件里边的内容. ...
- C++简单使用Jsoncpp来读取写入json文件
一.源码编译 C++操作json字符串最好的库应该就是jsoncpp了,开源并且跨平台.它可以从这里下载. 下载后将其解压到任意目录,它默认提供VS2003和VS2010的工程文件,使用VS2010可 ...
- C++ 中使用boost::property_tree读取解析ini文件
boost 官网 http://www.boost.org/ 下载页面 http://sourceforge.net/projects/boost/files/boost/1.53.0/ 我下载的是 ...
随机推荐
- MySQL中视图和普通表的区别
1.视图是数据库数据的特定子集.可以禁止所有用户访问数据库表,而要求用户只能通过视图操作数据,这种方法可以保护用户和应用程序不受某些数据库修改的影响. 2.视图是抽象的,他在使用时,从表里提取出数据, ...
- History of programming language
1940之前 第一个编程语言比现代的计算机还早诞生.首先,这种语言是种编码(en:code). 于1801年发明的提花织布机(或称甲卡提花织布机,英文:en:Jacquard loom),运用打孔卡上 ...
- Howto: 在ArcGIS10中将地图文档(mxd文档)批量保存到之前版本
Howto: 在ArcGIS10中将地图文档(mxd文档)批量保存到之前版本 文章编号 : 38783 软件: ArcGIS - ArcEditor 10 ArcGIS - ArcInfo 10 A ...
- 是用TOP关键字对COUNT性能优化
在对大数据量进行检索或者分页的时候需要计算命中记录数大小,一般情况下我们可以直接COUNT得到结果,但是当结果集很大的时候(比如1万以上)具体结果值已经不重要了.没有人真的翻阅1万条记录,比如百度,你 ...
- ADS1.2使用
ADS编译错误Error : A1163E: Unknown opcode ARM汇编指令不支持顶格写,否则不能识别,指令前加上空格即可. 使用for(;;;)//死循环,编译报错如下,说是该语句有错 ...
- 总线设备驱动模型---platform篇
总线设备驱动模型----驱动篇 http://blog.chinaunix.net/uid-27664726-id-3334923.html http://blog.chinaunix.net/uid ...
- BZOJ4833: [Lydsy1704月赛]最小公倍佩尔数(min-max容斥&莫比乌斯反演)(线性多项式多个数求LCM)
4833: [Lydsy1704月赛]最小公倍佩尔数 Time Limit: 8 Sec Memory Limit: 128 MBSubmit: 240 Solved: 118[Submit][S ...
- java spring boot 出现 java.lang.UnsatisfiedLinkError
java.lang.UnsatisfiedLinkError: E:\ruanjian\jdk\bin\tcnative-1.dll: Can't load IA 32-bit .dll on a A ...
- 浅谈闭包(Closure)
一.闭包 好长时间对于闭包都知道与函数和其环境变量有关系,但是一直没有一个清晰的认识.今天查看了一下维基百科,顺便写下来. 二.闭包的定义 在编程语言中,闭包(语义闭包或函数闭包)是指哪些可以将语义范 ...
- 排列算法(reverse...rotate...next_permutation)
#include <iostream> #include <algorithm> #include <cstring> using namespace std; i ...