讀取配置文件是很常見的,現(xiàn)在想弄一個用C簡單讀取配置文件的一個程序,下面是代碼:
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<fstream>
using namespace std;
#define LENG 1000
void fileRead(char * fname) {
????char key[LENG], value[LENG];
????int i = 0, j=0;
????int len;
????FILE *fp;
????char buf[LENG];
????fp = fopen(fname, "r");
????if (fp == NULL) {
????????cout << "fail to read!" << endl;
????????exit(1);
????}
????while (fgets(buf,LENG , fp) != NULL) {
????????len = strlen(buf);
????????int value_length=0;
????????int key_length=0;
????????int j1 = 0, i2 = 0, j2 = 0;
????????i=0;
????????while (buf[i] != '=') {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //等號定位
????????????i++;
????????}
????????for (j = 0; j < i; j++) {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //關(guān)鍵字讀取
????????????key[j1] = buf[j];
????????????j1++;
????????????key_length=j1;
????????}
????????for (j = i+1; j < len; j++) {? ? ? ? ? ? ? ? ? ? //等號右邊的 值讀取
????????????value[j2] = buf[j];
????????????j2++;
????????????value_length=j2;
????????}
????????for (j = 0; j < key_length; j++)
????????????cout << key[j];
? ? ? ? for (j = 0; j < value_length; j++)
????????????cout << value[j];
????}
????fclose (fp);
}
int main() {
????char * filename = "1.txt";
????cout << endl;
????fileRead(filename);
????return 0;
}
配置文件格式如下:
SHCONFIG? ? ? ? ? ? = /home/wenbh/SuperCall/ShConfig.ini
DBSERVER? ? ? ? ? ? = 192.168.2.2
DBACCOUNT? ? ? ? ? ? = postgres
DBPASSWORD? ? ? ? = 123456 ?
MONITORPORT? ? ? ? = 23
MEETINGREMIND? ? = MeetingRemind.wav
讀這個文件時,把等號去除掉如下:
SHCONFIG? ? ? ? ? ? ? ? ? ? ? /home/wenbh/SuperCall/ShConfig.ini
DBSERVER? ? ? ? ? ? ? ? ? ? ? 192.168.2.2
DBACCOUNT? ? ? ? ? ? ? ? ? ? ? postgres
DBPASSWORD? ? ? ? ? ? ? ? ? 123456 ?
MONITORPORT? ? ? ? ? ? ? ? ? ? 23
MEETINGREMIND? ? ? ? ? ? ? ? ? MeetingRemind.wav
運(yùn)行代碼,如圖: