用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

MFC IniFile类

2014-10-01 作者: rentao315举报

[c++]代码库

/**********************************
首先需要外部配置:1、ini文件所在的文件目录(默认为应用程序下的config目录)
                  2、ini文件名
注意:ini文件所在的目录是指ini文件所在的文件夹,
      该类只支持创建在当前的应用程序的路径下
**********************************/
 
class AFX_EXT_CLASS CMyIniFile
{
public:
    CMyIniFile(CString folderName,CString fileName);
    virtual ~CMyIniFile();
    void SetFolderName(CString folderName);//设置目录名
    void SetFileName(CString fileName);//文件名(不包括路径)
    bool WriteStructToFile(__in     LPCWSTR lpszSection,//section
                            __in     LPCWSTR lpszKey,//key
                            __in_bcount_opt(uSizeStruct) LPVOID lpStruct,
                            __in     UINT     uSizeStruct);//以结构体的方式写入信息
    /*以结构体的方式读取信息*/
    bool GetStruct( __in     LPCWSTR lpszSection,//section
                    __in     LPCWSTR lpszKey,   //key
                    __out_bcount_opt(uSizeStruct) LPVOID   lpStruct,    //struct指针
                    __in     UINT     uSizeStruct/*结构体长度*/);
    bool WriteString(   LPCTSTR sectionName,
                        LPCTSTR lpKeyName,
                        LPCTSTR lpString); //写字符串
     
private:
    //获取当前程序路径
    CString         _QueryExePath(void);
    bool  CheckFolderExist(CString &strPath);//检测目录是否存在
    bool BeSureIniFileAvailable(void);
    bool CreateIniInfoFile();/*创建ini文件*/
         
private:
    CString  m_folderName;  //ini文件所在的文件夹名称
    CString  m_iniFileName; //ini文件名
    CString  m_appPath;     //应用程序的路径
    CString  m_iniFilePathAndName;
    //ini文件属性
    CString         _IniFileName;           //表信息配置文件名称(包括地址)
    bool            _isHaveInitIniFile; //
    CString         _iniSection;
 
};
 
////////////////////////////////////////////////////////////////////
// CMyIniFile
 
CMyIniFile::CMyIniFile(CString folderName,CString fileName)
{
    m_folderName = L"config";
    m_appPath = _QueryExePath();
    _isHaveInitIniFile = false;
    SetFolderName(folderName);
    SetFileName(fileName);
}
 
CMyIniFile::~CMyIniFile()
{
}
 
void CMyIniFile::SetFolderName(CString folderName)//设置目录名
{
    m_folderName = folderName;
}
 
void CMyIniFile::SetFileName(CString fileName)//文件名(不包括路径)
{
    m_iniFileName = fileName;
    if(m_iniFileName.Find(L".ini") == -1)//文件无后缀名
    {
        m_iniFileName+= L".ini";
    }  
 
}
 
// CMyIniFile 成员函数
//获取当前程序路径
CString CMyIniFile::_QueryExePath()
{
    TCHAR path[MAX_PATH];
    ::GetModuleFileName(NULL,path,MAX_PATH);
    CString p(path);
    int nPos = p.ReverseFind('\\');
    ASSERT(-1!=nPos);
    return p.Left(nPos+1);
}
 
bool  CMyIniFile::CheckFolderExist(CString &strPath)//检测目录是否存在
{
    WIN32_FIND_DATA  wfd;
    bool rValue = false;
    HANDLE hFind = FindFirstFile(strPath, &wfd);
    if ((hFind != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
    {
        rValue = true;  
    }
    FindClose(hFind);
    return rValue;
}
 
/*******************************************************/
/* 功能:      使用GaugesSetInfo.ini文件,初始化信息
/* 正常情况:    如果文件不存在,则新建文件,并初始化
/*              如果文件存在且能打开则直接返回true
/* 不正常情况:   文件存在,但是无法正常打开,则返回false;
/*******************************************************/
bool CMyIniFile::BeSureIniFileAvailable(void)
{
 
    if(_isHaveInitIniFile == true)
    {
        return true;
    }
    ASSERT(!m_iniFileName.IsEmpty());
     
    m_iniFilePathAndName.Format(L"%s%s\\%s",m_appPath,m_folderName,m_iniFileName);
     
    //ini文件夹是否存在,不存在则创建
    CString floder;
    floder.Format(L"%s%s",m_appPath,m_folderName);
    if(!CheckFolderExist(floder))
    {
        _wmkdir(floder);
    }
 
    //ini文件是否存在,不存在则创建
    CFileFind finder;
    BOOL bEist = finder.FindFile(m_iniFilePathAndName);
    CFile f;
    CFileException e;
    if(bEist)
    {//存在
        if(!f.Open(m_iniFilePathAndName, CFile::modeRead,&e))
        {//未被占用
            #ifdef _DEBUG
                afxDump<<"File could not be opened"<<e.m_cause<<"\n";
                return false;
            #endif
        }
        f.Close();
    }
    else    //不存在
    {//重新创建
        ASSERT(CreateIniInfoFile());//确保能创建
    }
    return _isHaveInitIniFile = true;
}
 
bool CMyIniFile::CreateIniInfoFile()
{
    /*创建ini文件*/
    CFile f;
    CFileException e;
    if(!f.Open(m_iniFilePathAndName, CFile::modeCreate | CFile::modeWrite,&e))
    {
        #ifdef _DEBUG
            afxDump<<"File could not be opened"<<e.m_cause<<"\n";
            return false;
        #endif
    }
    f.Close();
    return true;
}
 
bool CMyIniFile::GetStruct(  __in     LPCWSTR lpszSection,
                             __in     LPCWSTR lpszKey,
                             __out_bcount_opt(uSizeStruct) LPVOID   lpStruct,
                             __in     UINT     uSizeStruct)//以结构体的方式读取信息
{
     
    BeSureIniFileAvailable();
 
    if(!GetPrivateProfileStruct(lpszSection,lpszKey,
                                lpStruct,
                                uSizeStruct,
                                m_iniFilePathAndName))
    {//未获取到指定信息
        return false;
    }  
    return true;
     
}
bool CMyIniFile::WriteString(   LPCTSTR sectionName,
                                LPCTSTR lpKeyName,
                                LPCTSTR lpString) //写字符串
{
    BeSureIniFileAvailable();
    if(WritePrivateProfileString(sectionName,lpKeyName,lpString,m_iniFilePathAndName))
    {
        return true;
    }
    return false;
 
}
 
 
bool CMyIniFile::WriteStructToFile( __in     LPCWSTR lpszSection,
                                    __in     LPCWSTR lpszKey,
                                    __in_bcount_opt(uSizeStruct) LPVOID lpStruct,
                                    __in     UINT     uSizeStruct)//以结构体的方式写入信息
{
    BeSureIniFileAvailable();
     
    if(!WritePrivateProfileStruct(lpszSection,
                                    lpszKey,
                                    lpStruct,
                                    uSizeStruct,
                                    m_iniFilePathAndName))
    {//未获取到指定信息
        return false;
    }  
    return true;
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...