3568|6

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

一个文件读取的问题? [复制链接]

我在VC下写        char szDrive[256]={0};
        char szDir[256]={0};
        char szPath[256]={0};
        _splitpath(szFileName,szDrive,szDir,NULL,NULL);
        GetPrivateProfileString("robot1", "a3", "1",str,256,filepath);
可以用,但在CE下就不行,没_splitpath和GetPrivateProfileString函数,怎么办那?

最新回复

mark  详情 回复 发表于 2008-11-15 10:38
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
呵呵 自己写呀 后者我这里有现成的 给你帖出来
CString PGlobal::GetProfileString(const CString strSection, const CString strEntry,
        const CString strDefault, DWORD nSize, const CString strIniPath)
{
        if(strIniPath == L"" || strSection == L"" || strEntry == L"")
        {
                return strDefault;
        }
        CFile IniFile;
        CString strCombine;

//        TRY
        {
                // open target ini file.
                if(! IniFile.Open(strIniPath, CFile::modeRead))
                {
                        return strDefault;
                }
                // if the file is no data inside, return error.
                if(IniFile.GetLength() == 0)
                {
                        IniFile.Close();
                        return strDefault;
                }
                // read the string data for later use.
                WCHAR *pBuf;
                //the file is unicode, so data length must be twice size of that.
                pBuf = new WCHAR[IniFile.GetLength() / 2 + 1];
                if(pBuf == NULL)
                {
                        IniFile.Close();
                        return strDefault;
                }
                if(IniFile.Read(pBuf, IniFile.GetLength()) != IniFile.GetLength())
                {
                        delete[] pBuf;
                        IniFile.Close();
                        return strDefault;
                }
                pBuf[IniFile.GetLength() / 2] = NULL;
                strCombine.GetBuffer(nSize); //create a big buffer.
                strCombine = pBuf;
                delete[] pBuf;

                //see if the section, entry already exist.
                int iIndex1, iIndex2, iIndex3, iIndexT;
                iIndex1 = strCombine.Find(L"[" + strSection + L"]\r\n");
                if(iIndex1 == -1) // not found section
                {
                        IniFile.Close();
                        return strDefault;
                }
                iIndexT = iIndex1 + 4 + strSection.GetLength();
                iIndex2 = strCombine.Find(strEntry + L"=", iIndexT);
                if(iIndex2 == -1) // not found entry
                {
                        IniFile.Close();
                        return strDefault;
                }
                else
                {
                        //to find the entry key
                        iIndex3 = strCombine.Find(L"\r\n", iIndex2 + 1);
                        if(iIndex3 == -1)
                        {
                                IniFile.Close();
                                return strDefault;
                        }
                        // if find the entry key,
                        iIndexT = iIndex2 + 1 + strEntry.GetLength();
                        IniFile.Close();
                        //get the string between "enter key" and end of the string being searched before.
                        return strCombine.Mid(iIndexT, iIndex3 - iIndexT);
                }
        }
//        CATCH(CFileException, e)
        {
        }
//        END_CATCH //

        IniFile.Close();
        return strDefault;
}
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
只能自己写了啊,后者有现成的,帖给你,呵呵
CString PGlobal::GetProfileString(const CString strSection, const CString strEntry,
                                                                      const CString strDefault, DWORD nSize, const CString strIniPath)
{
        if(strIniPath == L"" || strSection == L"" || strEntry == L"")
        {
                return strDefault;
        }
        CFile IniFile;
        CString strCombine;

//        TRY
        {
                // open target ini file.
                if(! IniFile.Open(strIniPath, CFile::modeRead))
                {
                        return strDefault;
                }
                // if the file is no data inside, return error.
                if(IniFile.GetLength() == 0)
                {
                        IniFile.Close();
                        return strDefault;
                }
                // read the string data for later use.
                WCHAR *pBuf;
                //the file is unicode, so data length must be twice size of that.
                pBuf = new WCHAR[IniFile.GetLength() / 2 + 1];
                if(pBuf == NULL)
                {
                        IniFile.Close();
                        return strDefault;
                }
                if(IniFile.Read(pBuf, IniFile.GetLength()) != IniFile.GetLength())
                {
                        delete[] pBuf;
                        IniFile.Close();
                        return strDefault;
                }
                pBuf[IniFile.GetLength() / 2] = NULL;
                strCombine.GetBuffer(nSize); //create a big buffer.
                strCombine = pBuf;
                delete[] pBuf;

                //see if the section, entry already exist.
                int iIndex1, iIndex2, iIndex3, iIndexT;
                iIndex1 = strCombine.Find(L"[" + strSection + L"]\r\n");
                if(iIndex1 == -1) // not found section
                {
                        IniFile.Close();
                        return strDefault;
                }
                iIndexT = iIndex1 + 4 + strSection.GetLength();
                iIndex2 = strCombine.Find(strEntry + L"=", iIndexT);
                if(iIndex2 == -1) // not found entry
                {
                        IniFile.Close();
                        return strDefault;
                }
                else
                {
                        //to find the entry key
                        iIndex3 = strCombine.Find(L"\r\n", iIndex2 + 1);
                        if(iIndex3 == -1)
                        {
                                IniFile.Close();
                                return strDefault;
                        }
                        // if find the entry key,
                        iIndexT = iIndex2 + 1 + strEntry.GetLength();
                        IniFile.Close();
                        //get the string between "enter key" and end of the string being searched before.
                        return strCombine.Mid(iIndexT, iIndex3 - iIndexT);
                }
        }
//        CATCH(CFileException, e)
        {
        }
//        END_CATCH //

        IniFile.Close();
        return strDefault;
}
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
无语ing........ 这垃圾网络....... 帖多了 别拍我砖头.... @_@
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
举个例子好吗比方我想读取 CF卡上 config.ini 里的AAA=20的AAA 的值怎么写那?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
[TEST]
AAA=20
第一个参数是Section, 就是[TEST]这个,第二个是入口点AAA,最后一个是文件名,成功则返回20,失败则返回"".
strValue = GetProfileString(_T("TEST"), _T("AAA"),  _T(""), _MAX_PATH, L"config.ini ");
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

7
 
mark
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表