⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configfile.cpp

📁 查看局域网的信息,类似网上邻居的功能,例如查看哪台计算机在线等
💻 CPP
字号:
/*    configfile.cpp * *    Copyright (c) 1998, 2000, Alexander Neundorf *    neundorf@kde.org * *    You may distribute under the terms of the GNU General Public *    License as specified in the COPYING file. * *    This program is distributed in the hope that it will be useful, *    but WITHOUT ANY WARRANTY; without even the implied warranty of *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *    GNU General Public License for more details. * */#include "configfile.h"#include "getdebug.h"#include <iostream.h>#include <fstream.h>#include <ctype.h>#include <stdlib.h>#include <stdio.h>#include <string.h>Config::Config(const MyString& name/*,String path*/){   char buff[16*1024],c;/*   String s,empty="#############################################################################################################################################################";   String home=getenv("HOME");   if (home!="") home+=String("/")+name;   if (fexists(home)==0)   {      home=path+"/"+name;      if (fexists(home)==0)       {         home=name;         if (fexists(home)==0) return;      };   };*/   ifstream inf(name.data());   if (!inf)   {      cout<<"could not open file "<<name<<endl;      return;   };   getDebug()<<"Config::Config(): opened file "<<name<<endl;   //read the file   char key[256], value[16*1024];   do	{      char* buffStart=buff;		//inf.getline(buff,16*1024,'\n');      int bufSize(16*1024);      int lineBroken(0);      do      {         lineBroken=0;         inf.get(buffStart,bufSize,'\n');         inf.get(c);         int l=strlen(buffStart);         if (buffStart[l-1]=='\\')         {            buffStart=buffStart+l-1;            bufSize=bufSize+1-l;            lineBroken=1;         };      } while ((lineBroken) && (!inf.eof()));      //make it ignore comments      char *theChar=strchr(buff,'#');      if (theChar!=0)         *theChar='\0';      //now divide the line into key and value      theChar=strchr(buff,'=');      if (theChar!=0)      {         *theChar='\0';         key[0]='\0';         sscanf(buff,"%s",key);         //do we have something valid ?         if (key[0]!='\0')         {            //the char behind the = should be at least the terminating \0            // so I can be sure to access valid memory here, IMO            value[0]='\0';            strcpy(value,theChar+1);            //sscanf(theChar+1,"%s",value);            if (value[0]!='\0')            {               //here we can be sure that the list will only contain               //strings which are at least one char long               getDebug()<<"Config::Config(): adding "<<key<<endl;               MapEntry entry;               entry.key=key;               entry.value=value;               liste.append(entry);            };         };      };	}   while (!inf.eof());};MyString Config::getEntry(const char *key, const char* defaultValue){   //this should be faster than strlen()   if ((key==0) || (key[0]=='\0'))      return defaultValue;   getDebug()<<"Config::getEntry(): searching "<<key<<endl;   for (MapEntry *entry=liste.first(); entry!=0; entry=liste.next())   {      //well, I don't have hashes, but maybe this already      //helps a bit to make it faster, since we only compare the whole      //string if the first char is already the same            getDebug()<<"Config::getEntry(): comparing "<<key[0]<<" and "<<entry->key[0]<<endl;      if (entry->key[0]==key[0])      {         getDebug()<<"Config::getEntry(): the same :-), now comparing "<<key<<" with "<<entry->key<<endl;         if (entry->key==key)         {            getDebug()<<"Config::getEntry(): found :-)"<<key<<endl;            return entry->value;         };      };   };   return defaultValue;};int Config::getEntry(const char *key, int defaultValue){   char def[100];   sprintf(def,"%d",defaultValue);   MyString tmp=stripWhiteSpace(getEntry(key,def));   int i(0);   int ok=sscanf(tmp.c_str(),"%d",&i);   if (ok==1) return i;   return defaultValue;};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -