读配置文件C|C语言读写大量配置文件有什么好的建议

❶ c语言怎么加载自己写的配置文件

我是这么做的,比如 ini 里以 #注释,以=表示赋值## Note #aaa=bbb我从ini里一行一行读出来,如果第一个字母是#,就忽略否则就从 line_of_file 里查找 “=”字符,(去掉行末'\n'换行符)=之前的就是参数名,=之后的就是参数值(去掉空格,tab)(用strncpy)

❷ C怎样读取配置文件并设成环境变量

右键单机“我的电脑”选择“属性”,在出来的新界面中选择左边的菜单“高级系统设置”,会弹出一个框框,框框里面的最下面就有环境变量的编辑,你只要将你的环境变量丢里面去就行了。

❸ 用C语言读取一个文件中的内容,如何对不同的行进行解析,比如是配置文件

很简单的 配置文件 微软有抓们的一套解析函数 INI文件是Windows系统中一类比较重要的文件,通常用来存放系统或者应用程序的配置信息,以方便系统或者应用 程序在初始化时再次读入。比如Windows系统中的配置文件win.ini和system.ini,它们就主要存放系统启动或用户登陆时的系统信息。这 项功能在方便了系统配置的同时,也为非法程序的自动运行提供了可乘之机。显然,这类文件的重要性应该引起我们的重视。但是对于这样的ini文件的读写操作 却与普通文本文件有着种种的不同,尤其体现在编程实现上。笔者曾经尝试用手动更改的方法在文件中加入一些项,使得自己的程序能够在初始化时自动运行,但是 却没有成功,最后还是藉由编程的方法来实现了。这里主要涉及到一些API函数,而这些函数又往往不被人们所熟知,本文的任务就是在介绍这些函数的同时,用 简单的程序作了示例,下面我们言归正传。先来看几个往配置文件中写入信息的函数:(1)WritePrivateProfileSection()用来在ini文件中直接向指定区域写入键和值的信息,其原型如下:BOOL WritePrivateProfileSection(LPCTSTR lpAppName, // 指向指定字段的字符串LPCTSTR lpString, // 指向要写入的键与值字符串LPCTSTR lpFileName // 指向文件名称字符串,如果不包含完整路径,则在windows目录下创建);用法示例:WritePrivateProfileSection(_T(“windows”),_T(“load=c:\\winnt\\notepad.exe”),_T(“c:\\winnt\\win.ini”));(2)WritePrivateProfileString()与上一个函数的不同点在于其将键和值分开了,原型如下:BOOL WritePrivateProfileString(LPCTSTR lpAppName, // 指向指定字段的字符串LPCTSTR lpKeyName, // 指向指定键的字符串LPCTSTR lpString, // 指向指定值的字符串LPCTSTR lpFileName // 指向文件名称字符串);用法示例:WritePrivateProfileString(_T(“windows”),_T(load”)_T(“c:\\winnt\\notepad.exe”),_T(“c:\\winnt\\win.ini”));(3)WritePrivateProfileStruct()与前面两个的不同在于文件尾有校验和,原型如下:BOOL WritePrivateProfileStruct(LPCTSTR lpszSection, //指向指定字段的字符串LPCTSTR lpszKey, //指向指定键的字符串LPVOID lpStruct, //指向存放要加入的数据的缓冲区,如果为NULL,则删除键UINT uSizeStruct, //缓冲区大小,以字节为单位LPCTSTR szFile //以零结尾的文件名称字符串,如果为空,则向win.ini写入);用法示例:WritePrivateProfileStruct(_T(“windows”),_T(“load”),pBuffer,sizeof(pBuffer),_T(“c:\\winnt\\win.ini”));(4)还有两个函数,是专门用来向win.ini文件写入的,函数原型如下:BOOL WriteProfileSection(LPCTSTR lpAppName, //指向指定字段的字符串LPCTSTR lpString //指向指定值的字符串);BOOL WriteProfileString(LPCTSTR lpAppName, //指向指定字段的字符串LPCTSTR lpKeyName, //指向指定键的字符串LPCTSTR lpString //指向指定值的字符串);下面来看几个对应的从ini文件获取信息的API函数,上面已经说得很详细了,这里只说其中两个:Dword GetPrivateProfileString(LPCTSTR lpAppName, //指向指定字段的字符串LPCTSTR lpKeyName, //指向键的字符串LPCTSTR lpDefault, //如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量LPTSTR lpReturnedString, //存放INI文件中值的目的缓存区DWORD nSize, //目的缓冲区的大小,以字节为单位LPCTSTR lpFileName //指向INI文件名称的字符串); UINT GetPrivateProfileInt(LPCTSTR lpAppName, //指向指定字段的字符串LPCTSTR lpKeyName, //指向键的字符串INT nDefault, //如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量LPCTSTR lpFileName //指向INI文件名称的字符串);程序示例1: 我们在这里建立了一个应用程序“App Name”,并且使用了一个INI文件“appname.ini”,在此INI文件中,我们写入如下内容:[Section1] FirstKey = It all worked out okay. SecondKey = By golly, it works. ThirdKey = Another test. 代码分析如下:#include <stdio.h> #include <windows.h>//主函数main() { //定义局部CHAR inBuf[80]; HKEY hKey1, hKey2; DWORD dwDisposition; LONG lRetCode; // 试图创建INI文件的键值lRetCode = RegCreateKeyEx ( HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT \\CurrentVersion\\IniFileMapping\\appname.ini", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey1, &dwDisposition); //判断是否出错if (lRetCode != ERROR_SUCCESS){ printf ("Error in creating appname.ini key\n"); return (0) ; } //试图设置一个节区的值lRetCode = RegSetValueEx ( hKey1, "Section1", 0, REG_SZ, "USR:App Name\\Section1", 20); //判断是否出错if (lRetCode != ERROR_SUCCESS) { printf ( "Error in setting Section1 value\n"); return (0) ; } //试图创建一个应用名称键值lRetCode = RegCreateKeyEx ( HKEY_CURRENT_USER, "App Name", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey2, &dwDisposition); //判断是否出错if (lRetCode != ERROR_SUCCESS) { printf ("Error in creating App Name key\n"); return (0) ; }//强制系统重新读取映射区的内容到共享内存中,以便于将来对应用程序的调用可//以找到它,而不需要重新启动系统 WritePrivateProfileStringW( NULL, NULL, NULL, L"appname.ini" ); //向INI文件中添加一些键值 WritePrivateProfileString ("Section1", "FirstKey", "It all worked out okay.", "appname.ini"); WritePrivateProfileString ("Section1", "SecondKey", "By golly, it works.", "appname.ini"); WritePrivateProfileSection ("Section1", "ThirdKey = Another Test.", "appname.ini"); //测试一下添加的正确性GetPrivateProfileString ("Section1", "FirstKey", "Bogus Value: Get didn't work", inBuf, 80, "appname.ini"); printf ("%s", inBuf); return(0); }程序示例2:通过修改win.ini中的字段[windows]中的键load或run,或者是为system.ini中的字段[boot]中的键 shell增加值,可以达到设置程序自动运行的目的。假设我们要自动运行notepad.exe,修改后的win.ini或system.ini文件象这 样就可以:win.ini[windows]load=c:\winnt\notepad.exerun=c:\winnt\notepad.exesystem.ini[boot]shell=c:\winnt\explorer.exe c:\winnt\notepad.exe注意:system.ini文件的修改要特别注意,如果你单纯改成shell=c:\winnt\notepad.exe,则不能首先运行 explorer.exe,很明显你将看不到桌面和任务栏,呵呵,笔者在做实验时就曾因为粗心造成了这样的后果,不过不用害怕,只要你用我们下面提供的程 序,将它修改过来就可以了,默认时,系统在system.ini中的[boot]下是shell=c:\winnt\explorer.exe。很多非法 程序就是通过修改这两个文件来达到自启动的目的的。下面这个程序可以在附书光盘中找到,名称为“AutoPlay”,使用VC++6.0写成,核心程序源代码如下:void CAutoRunDlg::OnBrowse() {//只浏览exe文件CfileDialog fileDlg(TRUE,_T("EXE"),_T("*.exe"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(_T("Executable Files (*.exe) |*.exe ||")));//显示打开文件的对话框//当操作者选择OK时,程序取得选择文件的全路径名(包括文件的路径及文件名称),并将相应的数值传输给相关的控件变量。if(fileDlg.DoModal()==IDOK){ m_strFileName=fileDlg.GetPathName();//向将变量中的数值传输给控件显示出来。 UpdateData(FALSE);} }void CAutoRunDlg::OnApply() {//更新数据UpdateData(TRUE); //写入ini文件LPCTSTR filename; filename=m_strFileName; WritePrivateProfileString(_T("windows"),_T("load"),filename,_T("c:\\winnt\\win.ini"));}您如果要更改system.ini,可以将WritePrivateProfileString(_T("windows"),_T("load"),filename,_T("c:\\winnt\\win.ini"));改为 WritePrivateProfileString(_T("boot"),_T("shell"),filename,_T("c:\\winnt \\system.ini"));并且在输入文件名时输入c:\winnt\explorer.exe c:\winnt\notepad.exe。写到这里,本文的意图基本达到,如果您可以把某些代码亲自实现,相信读者会有比较大的收获。

❹ c语言读写配置文件

#include <stdio.h>#include <string.h>#define MAX_BUF 20#define SERVER "localhost"#define CONFIG_FILE "1.conf"bool SetAuthServer(char* strServerAdd){ char buf[MAX_BUF], tempBuf[MAX_BUF]; memset(buf, 0, MAX_BUF); memset(tempBuf, 0, MAX_BUF); FILE *pF = fopen(CONFIG_FILE, "r"); if(!pF) { printf("打开文件失败!\n"); return false; } fread(buf, MAX_BUF, 1, pF); if(!feof(pF)) { printf("读取不完整,请把MAX_BUF设置为大一点, 当前大小为: %d\n", MAX_BUF); fclose(pF); return false; } fclose(pF); char *lpPos = buf; char *lpNewPos = buf; while(lpNewPos = strstr(lpPos, SERVER)) { strncpy(tempBuf+strlen(tempBuf), lpPos, lpNewPos-lpPos); strcat(tempBuf, strServerAdd); lpPos = lpNewPos + strlen(SERVER); } strcat(tempBuf, lpPos); pF = fopen(CONFIG_FILE, "w"); if(!pF) { printf("打开文件失败!\n"); return false; } fwrite(tempBuf, strlen(tempBuf), 1, pF); fclose(pF); return true;}void main(){ char buf[20]; printf("请输入一个字符串来修改服务器配置: "); scanf("%s", buf); if(SetAuthServer(buf) == true) printf("修改成功!\n"); else printf("修改失败!\n"); }

❺ 用C#如何读写配置文件

INI文件就是扩展名为"ini"的文件。其一般形式如下:[section1] // 配置节//键名 //键值keyword1 = valuelkeyword2 = value2……[section2]keyword3 = value3keyword4 = value4在Windows系统中,INI文件是很多,最重要的就是"System.ini"、"System32.ini"和"Win.ini"。该文件主要存放用户所做的选择以及系统的各种参数。用户可以通过修改INI文件,来改变应用程序和系统的很多配置。但自从Windows 95的退出,在Windows系统中引入了注册表的概念,INI文件在Windows系统的地位就开始不断下滑,这是因为注册表的独特优点,使应用程序和系统都把许多参数和初始化信息放进了注册表中。以及XML文件的国际标准化给INI文件又一次打击。但在某些场合,INI文件还拥有其不可替代的地位。比如绿色软件的规定就是不向注册表和系统中填入新东西。对于软件需要储存的信息就需要存入到文件中了。XML虽然兼容性比较好,但对于仅仅保存几个自定义参数而言就显得大材小用了。这是就可以选择使用快速简单的储存方式:INI文件。本文就来探讨一下C#是如何对INI进行读写操作。主要思路是调用Win32 API。1.引入命名空间usingSystem.Runtime.InteropServices;2.声明(把一个Win32 API函数转成C#函数)//声明INI文件的写操作函数 WritePrivateProfileString()[DllImport("kernel32")]private static extern longWritePrivateProfileString(string section, string key, string val, stringfilePath);//声明INI文件的读操作函数 GetPrivateProfileString()[DllImport("kernel32")]private static extern intGetPrivateProfileString(string section, string key, string def, StringBuilderretVal, int size, string filePath);3.函数public void Writue(string section,string key, string value){// section=配置节,key=键名,value=键值,path=路径WritePrivateProfileString(section,key, value, sPath);}public string ReadValue(stringsection, string key){// 每次从ini中读取多少字节System.Text.StringBuilder temp =new System.Text.StringBuilder(255);// section=配置节,key=键名,temp=上面,path=路径GetPrivateProfileString(section,key, "", temp, 255, sPath);returntemp.ToString(); //注意类型的转换}到此基本功能已经实现了。下面我们将所有的代码重新整合一下:namespace Library.File{public class Ini{// 声明INI文件的写操作函数 WritePrivateProfileString()[System.Runtime.InteropServices.DllImport("kernel32")]private static extern longWritePrivateProfileString(string section, string key, string val, stringfilePath);// 声明INI文件的读操作函数 GetPrivateProfileString()[System.Runtime.InteropServices.DllImport("kernel32")]private static extern intGetPrivateProfileString(string section, string key, string def,System.Text.StringBuilder retVal, int size, string filePath);private string sPath = null;public Ini(string path){this.sPath = path;}public void Writue(string section,string key, string value){// section=配置节,key=键名,value=键值,path=路径WritePrivateProfileString(section,key, value, sPath);}public string ReadValue(stringsection, string key){// 每次从ini中读取多少字节System.Text.StringBuilder temp =new System.Text.StringBuilder(255);// section=配置节,key=键名,temp=上面,path=路径GetPrivateProfileString(section,key, "", temp, 255, sPath);return temp.ToString();}}}开始调用函数。// 写入iniIni ini = newIni("C:/config.ini");ini.Writue("Setting","key1", "HELLO WORLD!");ini.Writue("Setting","key2", "HELLO CHINA!");// 读取iniIni ini = newIni("C:/config.ini");string str1 =ini.ReadValue("Setting", "key1");MessageBox.Show(str1);二,在一些小的应用中,有时候不需要使用数据困这样大规模的数据管理工具,也很少进行数据的查询、修改等操作,而仅用文件来存储数据。这时就需要使用。net中的文件操作对象,如file、streamReader、streamWriter等。1,使用File对象操作文件System.IO.File类提供了一系类的静态办法,完成对晚间的常用操作,如新建、删除、拷贝、移动等2,使用StreamWriter写入文件在System.IO空间中定义了一个文件写入器对象StreamWriter,使用它可以以一种特定的编码向输出流中(Stream)写入字符。3,使用SteamReader读取文件与streamWrite对应

❻ c配置文件读写

#include <stdio.h>#include <string.h>#define MAX_BUF 2048#define SERVER "authserver "#define CONFIG_FILE "1.conf"bool SetAuthServer(char* strServerAdd){ char buf[MAX_BUF], writeBuf[MAX_BUF]; memset(buf, 0, MAX_BUF); memset(writeBuf, 0, MAX_BUF); FILE *pF = fopen(CONFIG_FILE, "r"); if(!pF) { printf("打开文件失败!\n"); return false; } //fread(buf, MAX_BUF, 1, pF); char *lpPos = NULL; while(fgets(buf, MAX_BUF, pF)) //读取一行 { if(lpPos = strstr(buf, SERVER)) { strncpy(writeBuf+strlen(writeBuf), buf, lpPos+strlen(SERVER)-buf); strcat(writeBuf, strServerAdd); strcat(writeBuf, "\r\n"); } else strcat(writeBuf, buf); if(feof(pF)) break; } fclose(pF); pF = fopen(CONFIG_FILE, "w"); if(!pF) { printf("打开文件失败!\n"); return false; } fwrite(writeBuf, strlen(writeBuf), 1, pF); fclose(pF); return true;}

❼ C语言读写大量配置文件有什么好的建议

读写配置文件在linux下的格式和windows下不太相同,附件是一些学习资料,后续会慢慢更新回

linux系统下的配置文件

XDG_DESKTOP_DIR="$HOME/桌面答"XDG_DOWNLOAD_DIR="$HOME/下载"XDG_TEMPLATES_DIR="$HOME/模板"XDG_PUBLICSHARE_DIR="$HOME/公共的"XDG_DOCUMENTS_DIR="$HOME/文档"XDG_MUSIC_DIR="$HOME/音乐"XDG_PICTURES_DIR="$HOME/图片"XDG_VIDEOS_DIR="$HOME/视频"molea]

windows系统下的配置文件

[molea]

name1=value1name2=value2 [moleb]name3=value3name4=value4

一般嵌入式上用的都是linux这种风格

❽ c中读取配置文件一般是怎么写的

我是这么做的,比如 ini 里以 #注释,以=表示赋值## Note #aaa=bbb我从ini里一行一行读出来,如果第一回个字母是答#,就忽略否则就从 line_of_file 里查找 “=”字符,(去掉行末'\n'换行符)=之前的就是参数名,=之后的就是参数值(去掉空格,tab)(用strncpy)

❾ 是怎么读取配置文件的

<!– 正文开始 –>一般来说。我们会将一些配置的信息放在。properties文件中。然后使用${}将配置文件中的信息读取至spring的配置文件。那么我们如何在spring读取properties文件呢。1.首先。我们要先在spring配置文件中。定义一个专门读取properties文件的类.例: <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath*:jdbc.properties</value> <!–要是有多个配置文件,只需在这里继续添加即可 –> </list> </property> </bean>这里为什么用locations(还有一个location)是因为。一般来说。我们的项目里面。配置文件可能存在多个。就算是只有一个。那将来新添加的话。只需在下面再加一个value标签即可。而不必再重新改动太多。(当然。性能上是否有影响,这个以当前这种服务器的配置来说。是基科可以忽略不计的)。然后我们就可以在jdbc.properties文件中填写具体的配置信息了。 <!– 配置C3P0数据源 –> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass"> <value>${jdbc.driverClassName}</value> </property> <property name="jdbcUrl"> <value>${jdbc.url}</value> </property> <property name="user"> <value>${jdbc.username}</value> </property> <property name="password"> <value>${jdbc.password}</value> </property> </bean>jdbc.properties文件写的信息。jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/testjdbc.username=rootjdbc.password=root附加一个列子: <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>file:/data/pc-config/passport.properties</value> <value>classpath:memcached.properties</value> </list> </property> </bean>classpath:是指的当前类文件的目录下。file:在window下是指的当前分区(比如你的项目是放在d盘,则是在d:/data/pc-config/passport.properties) 在linux下,则是当前路径下的文件/data/pc-config/passport.properties

❿ linux下用c读取配置文件问题

我想问下你的形参char *buf,是做什么的?,保存读取下来的字符串用的?回但是你下面要求答转换进制,也就是说这些数据是数字性质,那应该是用int来保存阿 ?另外你要保存的数据是len行吧,那就应该是int **才对咯详细说明一下我的疑惑哈,现在已经帮你把数据都能够读出来了,就看你要怎么处理这些数据了还有就是最后的转换,是要10进制保存下来,还是只需要以10进制输出到屏幕或者文件中即可以字符串输出还是int输出,都要说明白


赞 (0)