配置文件操作(获取路径、及取得相应数据)
1.获取当前dll或者exe的路径: 方法一、 void GetNowDllPath(CString & strPath) { Char szPath[100]={0}; CWinApp *pApp = AfxGetApp(); //szPath结果看下面示例截图,一目了然;pApp->m_hInstance为当前模块的句柄 GetModuleFileName(pApp? pApp->m_hInstance: NULL, szPath, sizeof(szPath)); Char *pDest = strrchr(szPath, ‘\\’);//找到字符串szPath中最后一个单斜线的位置 If(pDest != NULL) { *pDest = ‘\0’;//最后一个单斜线的位置,置为结束符 } strPath = szPath; } 方法二、 void GetNowDllPath(CString & strPath) { char szPath[260]={0}; GetCurrentDirectory(511,szPath); CString dllHome; dllHome = szPath; int p1 = dllHome.ReverseFind('/'); int p2 = dllHome.ReverseFind('\\'); int pos = max(p1,p2); if(pos > 0) dllHome = dllHome.Left(pos+1); strPath = dllHome; } GetModuleFileName 与 GetCurrentDirectory 区别: GetModuleFileName 函数指定当前进程模块的路径.它仅仅操作当前进程下的模块.如果想获取其他进程下的模块信息, 则需使用 GetModuleFileNameEx 函数。 GetCurrentDirectory 返回当前进程的当前目录,并不一定返回你的应用程序的目录。如果你在应用程序中调用了打开文件对话框,你选择了一个文件,那么,这个文件所在的目录就成了当前进程的当前目录了。 2.获取当前DLL下配置文件的信息: CString HomePath; GetNowDllPath(HomePath); CString InitPath = HomePath + “\\scistock.ini”; Char g_szMongoDBHost[128]={0}; Int g_nMongoDBPort = 0; GetPrivateProfileString(“MongoDB”, ”HOST”, “127.0.0.1”, g_szMongoDBHost , 128, IniPath); g_nMongoDBPort = GetPrivateProfileInt(“MongoDB”, “PORT”, 27017, IniPath);
示例图片:
GetPrivateProfileString、GetPrivateProfileInt的原型: DWORD GetPrivateProfileString( LPCTSTR lpAppName, //配置文件的section名 LPCTSTR lpKeyName, //配置文件的key名 LPCTSTR lpDefault, //默认返回值 LPTSTR lpReturnedString, //返回值 DWORD nSize, //返回值最大长度 LPCTSTR lpFileName //配置文件路径 ); UINT WINAPI GetPrivateProfileInt ( _In_LPCTSTR lpAppName, //配置文件的section名 _In_LPCTSTR lpKeyName, //配置文件的key名 _In_INT nDefault, //默认返回值 _In_LPCTSTR lpFileName //配置文件路径 );
配置文件截图: