现在的程序一般都要记录一些自己的运行信息,这些信息要保存在什么地方呢?微软的建议是保存在注册表中,这样不容易丢失。但最近我对一些普通电脑用户了解,用户们并不希望程序向注册表中写非系统性的信息,避免注册表越来越大,现在一般使用半年以上的电脑,一般注册表都在 30M 以上,电脑的启动速度明显变慢。因此我这里用 windows 以前的函数写了一个操作INI文件的类,把程序的运行信息保存在当前目录中的 INI 文件中。
该类可以直接读写 string,int,DWORD,doule 四种数据,操作简单,具体代码如下:
#define MAX_LENGTH 256
class CIniFile { public: CIniFile(); virtual ~CIniFile();
void SetIniFileName(CString FileName) { IniFileName = FileName; }
CString GetIniFileName() { return IniFileName; }
CString GetString(CString AppName,CString KeyName,CString Default = ""); int GetInt(CString AppName,CString KeyName,int Default = 0); double GetDouble(CString AppName,CString KeyName,double Default = 0); unsigned long GetDWORD(CString AppName,CString KeyName,unsigned long Default = 0);
BOOL SetString(CString AppName,CString KeyName,CString Data); BOOL SetInt(CString AppName,CString KeyName,int Data); BOOL SetDouble(CString AppName,CString KeyName,double Data); BOOL SetDWORD(CString AppName,CString KeyName,unsigned long Data);
private: CString IniFileName; };
CIniFile::CIniFile() { char szAppName[MAX_PATH]; int len;
::GetModuleFileName(AfxGetInstanceHandle(), szAppName, sizeof(szAppName)); len = strlen(szAppName); for(int i=len; i>0; i--) { if(szAppName[i] == '.') { szAppName[i+1]='\0'; break; } } strcat(szAppName, "ini"); IniFileName = szAppName; }
CIniFile::~CIniFile() {
}
CString CIniFile::GetString(CString AppName,CString KeyName,CString Default) { TCHAR buf[MAX_LENGTH]; ::GetPrivateProfileString(AppName, KeyName, Default, buf, sizeof(buf), IniFileName); return buf; }
double CIniFile::GetDouble(CString AppName,CString KeyName,double Default) { TCHAR buf[MAX_LENGTH]; CString temp; temp.Format("%f",Default); ::GetPrivateProfileString(AppName, KeyName, temp, buf, sizeof(buf), IniFileName); return atof(buf); }
int CIniFile::GetInt(CString AppName,CString KeyName,int Default) { return ::GetPrivateProfileInt(AppName, KeyName, Default, IniFileName); }
unsigned long CIniFile::GetDWORD(CString AppName,CString KeyName,unsigned long Default) { TCHAR buf[MAX_LENGTH]; CString temp; temp.Format("%u",Default); ::GetPrivateProfileString(AppName, KeyName, temp, buf, sizeof(buf), IniFileName); return atol(buf); }
BOOL CIniFile::SetString(CString AppName,CString KeyName,CString Data) { return ::WritePrivateProfileString(AppName, KeyName, Data, IniFileName); }
BOOL CIniFile::SetInt(CString AppName,CString KeyName,int Data) { CString temp; temp.Format("%d",Data); return ::WritePrivateProfileString(AppName, KeyName, temp, IniFileName); }
BOOL CIniFile::SetDouble(CString AppName,CString KeyName,double Data) { CString temp; temp.Format("%f",Data); return ::WritePrivateProfileString(AppName, KeyName, temp, IniFileName); }
BOOL CIniFile::SetDWORD(CString AppName,CString KeyName,unsigned long Data) { CString temp; temp.Format("%u",Data); return ::WritePrivateProfileString(AppName, KeyName, temp, IniFileName); } 
|