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/ 我下载的是 ...
随机推荐
- 采用Serverless架构搭建Web应用
本文会向你介绍一种新的可能,一种无服务器的方案来搭建Web应用.使用这个方案大部分运维方面的问题就不需要你自己操心了,而且也省去运行服务器的费用.本文从无服务的优势与限制两方面带您初识Serverle ...
- 使用Lucene对doc、docx、pdf、txt文档进行全文检索功能的实现
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/76273859 本文出自[我是干勾鱼的博客] 这里讲一下使用Lucene对doc. ...
- 关键词提取算法-TextRank
今天要介绍的TextRank是一种用来做关键词提取的算法,也可以用于提取短语和自动摘要.因为TextRank是基于PageRank的,所以首先简要介绍下PageRank算法. 1.PageRank算法 ...
- Qt SD卡 文件系统挂载、文件预览
/********************************************************************************** * Qt SD卡 文件系统挂载. ...
- IO的概念
什么是IO: 在内存中存在数据交换的操作都可以认为是IO操作 和终端交互:input print 和磁盘交互:read write 和网络交互:recv send IO密集型程序:在程序执行过程中存在 ...
- 关于cookie和session的使用和理解
由于项目需要,最近用session容器比较多,传载的同时加上了自己的一些理解,不足之处还请大家补充和纠正. 一.cookie机制和session机制的区别 ********************** ...
- Struts2自定义标签3模仿原有的s:if s:elseif s:else自定义自己的if elsif else
第一步:webroot/web-inf下简历str.tld文件 <?xml version="1.0" encoding="UTF-8"?> < ...
- VUE的使用方法
vueInit: function() { var _this = this; this.vue = new Vue({ el: '#pa', data: { //存放初始化数据 sourceData ...
- Java 的Integer、int与new Integer到底怎么回事?
先做一些总结,询问了些经验比较多的师傅,在这里表示感谢,然后自己总结下,今天的收获分享给大家: 1. int 和Integer在进行比较的时候,Integer会进行拆箱,转为int值与int进行比较. ...
- PTHREAD的WINDOWS开发包
PTHREAD的WINDOWS开发包 网站地址是http://sourceware.org/pthreads-win32/