头文件
class CConfig
{
private:
CConfig(void);
static CConfig *m_pInstance; //单列对象
public:
static CConfig *GetInstance();
static CString GetCurrentAppPath();
static BOOL IsPathFileExists( CString strFilePath, BOOL bIsCreate = TRUE);
static BOOL MakeDir(const char* szPath);
private:
class CGarbo
{
public:
~CGarbo()
{
if (CConfig::m_pInstance)
delete CConfig::m_pInstance;
}
};
static CGarbo garbo; //用于释放单利模式对象的类
};
#include "StdAfx.h"
#include "Config.h"
#include <afxmt.h>
#include <Shlwapi.h>
CMutex g_mtConfiog;
CConfig *CConfig::m_pInstance = NULL;
CConfig::CGarbo CConfig::garbo; //这里必须定义CGarbo对象不然单例对象不会被释放(CGarbo类析构不会被调用)
CConfig::CConfig(void)
{
}
/*
* 函数:
* GetInstance(获取实例对象函数)
* 参数:
* 无
* 返回值:
* 返回实例对象指针
* ssdwujianhua 2017/06/06
*/
CConfig * CConfig::GetInstance()
{
if ( CConfig::m_pInstance == NULL )
{
g_mtConfiog.Lock();
if ( CConfig::m_pInstance == NULL )
{
CConfig::m_pInstance = new CConfig();
}
g_mtConfiog.Unlock();
}
return CConfig::m_pInstance;
}
/*
* 函数:
* GetCurrentAppPath(获取当前app文件路径)
* 参数:
* 无
* 返回值:
* 返回当前app文件路径(也是当前可执行程序的根目录)
* ssdwujianhua 2017/06/06
*/
CString CConfig::GetCurrentAppPath()
{
static BOOL bFlag = FALSE;
static CString strPath;
if ( !bFlag )
{
GetModuleFileName(NULL, strPath.GetBufferSetLength(MAX_PATH + 1), MAX_PATH);
strPath.ReleaseBuffer();
int nPos;
nPos = strPath.ReverseFind('\\');
strPath = strPath.Left(nPos);
bFlag = TRUE;
}
return strPath;
}
/*
* 函数:
* IsPathFileExists(判断文件是否存在)
* 参数:
* strFilePath:文件路径
* bIsCreate:是否创建(针对文件不存在的情况下)
* 返回值:
* 存在返回TURE 不存在返回FALSE
* ssdwujianhua 2017/06/06
*/
BOOL CConfig::IsPathFileExists(CString strFilePath, BOOL bIsCreate /*= TRUE*/)
{
if ( PathFileExists( strFilePath))
{
return TRUE;
}
if ( !bIsCreate )
{
return FALSE;
}
//创建文件
return MakeDir(strFilePath.GetBuffer(0));
}
/*
* 函数:
* MakeDir(创建绝对路径文件夹)
* 参数:
* szPath:需要创建的文件夹路径
* 返回值:
* 成功返回TRUE失败返回FALSE
* ssdwujianhua 2017/06/06
*/
BOOL CConfig::MakeDir(const char* szPath)
{
char copy_path[512];
memset(copy_path, 0, sizeof(copy_path));
int len = 0;
char *last_mozi = NULL;
char *mozi = NULL;
char d_buf[512], dd_buf[512];
memset(d_buf, 0, sizeof(d_buf));
memset(dd_buf, 0, sizeof(dd_buf));
sprintf_s(copy_path, sizeof(copy_path), szPath);
len = strlen(copy_path);
last_mozi = CharPrev(copy_path, ©_path[len]);
if (last_mozi == (©_path[len-1]))
{
if (copy_path[len-1] == '\\' || copy_path[len-1] == '/')
{
copy_path[len-1] = 0x00;
}
}
CharPrev(copy_path, copy_path);
mozi = CharNext(copy_path);
while (*mozi != '\0')
{
if (*mozi == '\\' || *mozi == '/')
{
memset(d_buf, 0, sizeof(d_buf));
memcpy(d_buf, copy_path, mozi-copy_path);
sprintf_s(dd_buf, sizeof(d_buf), "%s", d_buf);
if (!PathFileExists(dd_buf))
{
if (!CreateDirectory(dd_buf, NULL))
{
return FALSE;
}
}
}
mozi = CharNext(mozi);
}
sprintf_s(dd_buf,sizeof(copy_path), "%s", copy_path);
if (!PathFileExists(dd_buf))
{
if (!CreateDirectory(dd_buf,NULL))
{
return FALSE;
}
}
return TRUE;
}