#pragma once

#include <string>
#include <sstream>

typedef std::basic_string<TCHAR>    tstring;

class CIniCfg
{
public:
    CIniCfg()
    {
        TCHAR szTemp[MAX_PATH];
        GetModuleFileName(NULL, szTemp, sizeof(szTemp));

        LPTSTR p = _tcsrchr(szTemp, _T('.'));
        if (p != NULL)
            _tcscpy(p, _T(".ini"));
        else
            _tcscat(szTemp, _T(".ini"));

        m_strFilePath = szTemp;
    }

    void SetName(LPCTSTR szName)
    {
        TCHAR szTemp[MAX_PATH];
        GetModuleFileName(NULL, szTemp, sizeof(szTemp));

        LPTSTR p = _tcsrchr(szTemp, _T('\\'));
        if (p != NULL)
        {
            _tcscpy(++p, szName);
        }        

        m_strFilePath = szTemp;
    }

    void SetPath(LPCTSTR szPath)
    {
        m_strFilePath = szPath;
    }

    BOOL SetInt(LPCTSTR lpAppName,  // pointer to section name
        LPCTSTR lpKeyName,  // pointer to key name
        int nValue)
    {
        std::basic_stringstream<TCHAR> ss;
        ss << nValue;    

        return WritePrivateProfileString(
            lpAppName,
            lpKeyName,
            ss.str().c_str(),    //strValue,
            m_strFilePath.c_str());
    }

    BOOL SetString(LPCTSTR lpAppName,  // pointer to section name
        LPCTSTR lpKeyName,  // pointer to key name
        LPCTSTR lpString)   // pointer to string to add

    {
        return WritePrivateProfileString(
            lpAppName,
            lpKeyName,
            lpString,
            m_strFilePath.c_str());
    }

    int GetInt(LPCTSTR lpAppName,                // address of section name
        LPCTSTR lpKeyName,                // address of key name
        int nDefault)                    // return value if key name is not found
    {
        return GetPrivateProfileInt(
            lpAppName,
            lpKeyName,
            nDefault,
            m_strFilePath.c_str());
    }

    tstring GetString(LPCTSTR lpAppName,        // points to section name
        LPCTSTR lpKeyName,        // points to key name
        LPCTSTR lpDefault)        // points to default string
    {
        TCHAR szRet[MAX_PATH] = {};
        DWORD dwSize = MAX_PATH;

        GetPrivateProfileString(
            lpAppName,            // points to section name
            lpKeyName,            // points to key name
            lpDefault,            // points to default string
            szRet,                // points to destination buffer
            dwSize,                // size of destination buffer
            m_strFilePath.c_str());

        return szRet;
    }

protected:
    tstring        m_strFilePath;
};

c/c++常用代码 -- ini文件操作的更多相关文章

  1. ini文件操作

    Config.ini 文件操作 [SYS] sysname=hy company=hyhy tel=2 using System; using System.Collections.Generic; ...

  2. ini 文件操作记要(1): 使用 TIniFile

    ini 文件操作记要(1): 使用 TIniFile unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Class ...

  3. winform INI文件操作辅助类

    using System;using System.Runtime.InteropServices;using System.Text; namespace connectCMCC.Utils{ // ...

  4. [C#] 常用工具类——文件操作类

    /// <para> FilesUpload:工具方法:ASP.NET上传文件的方法</para> /// <para> FileExists:返回文件是否存在&l ...

  5. Ini文件操作类

    /// <summary> /// Ini文件操作类 /// </summary> public class Ini { // 声明INI文件的写操作函数 WritePriva ...

  6. ansible笔记(5):常用模块之文件操作(二)

    ansible笔记():常用模块之文件操作(二) 文件操作类模块 find模块 find模块可以帮助我们在远程主机中查找符合条件的文件,就像find命令一样. 此处我们介绍一些find模块的常用参数, ...

  7. C# ini文件操作【源码下载】

    介绍C#如何对ini文件进行读写操作,C#可以通过调用[kernel32.dll]文件中的 WritePrivateProfileString()和GetPrivateProfileString()函 ...

  8. C#读写ini文件操作

    ini文件,是windows操作系统下的配置文件,ini文件是一种按照特点方式排列的文本文件,它的构成分为三部分,结构如下: [Section1] key 1 = value2 key 1 = val ...

  9. C# Ini文件操作

    在开源中国看到的操作ini文件的,写的还不看,留着以后用 using System; using System.IO; using System.Runtime.InteropServices; us ...

随机推荐

  1. Windows7:Visual Studio 2008试用版的评估期已经结束解决方法

    Windows7:Visual Studio 2008试用版的评估期已经结束解决方法       以前在Windows2003碰到这个问题时,都是到"控制面板→添加或删除程序"选择 ...

  2. linux .net mono方案测试记录与报告(一)

    第一阶段 linux .net 方案测试 硬件为4核8线程的笔记本i7-4710mq 分配了4个线程 情况下 1.方案一 nginx+fastcgi-mono-server4方式 性能为每秒处理140 ...

  3. 使用python脚本实现基于指定字符串的文本排序

    朋友用ansible导出了一个文件,文件中包含上千台机器的磁盘信息,他想要知道哪些机器最需要赶紧扩磁盘.思路是,按剩余磁盘空间百分数,从小到大对文本内容重新排序.下面是具体实现. 源文件ip.txt的 ...

  4. use python get information from one page

    #!/usr/bin/python read = file('thread-1554-1-1.html','r') wr = file('list','w') while 1: line=read.r ...

  5. Java设计模式(Design Patterns In Java)读书摘要——第1章 绪论

    为何需要模式 模式是做事的方法,是实现目标,研磨技术的方法.通俗点说,模式是为了解决某个行业的某个问题的有效的方法或技艺. 为何需要设计模式 为了提升代码的水准,是代码变得简洁而易用.模式是一种思想, ...

  6. eclipse指定启动的jdk

    原文:http://my.oschina.net/noday/blog/203987 到eclipse目录,打开eclipse.ini文件,在指定位置加入你的jdk相关文件(如下面示例配置中-vm配置 ...

  7. js各种宽高(2)

    在javascript和jquery中,都有对各种高度的写法,在这里,我们就着重讲一下窗口.文档等高度的理解.(宽度和高度差不多!) jquery的各种高度 首先来说一说$(document)和$(w ...

  8. Entity Framework 5问题集锦

    ORM框架万万千,一直都使用NHibernate,没用过其他的.最近闲来学习下微软自家的Entity Framework,记录一些我学习过程中遇到的头疼问题.(不断更新中...) 教程:http:// ...

  9. ASP.NET MVC4学习笔记之Controller的激活

    一. 高层相关类说明 当路由系统根据请求Url收集路由信息后,下一步就要将路由信息传给Controller激活系统,Controller激活系统负责实现了IController接口的Controlle ...

  10. 光迁PING值延迟计算!以及到中国最快的美国机房是哪个机房?

    美国圣安娜KT机房/美国KT机房/美国KT服务器 KT机房是美国直达大陆最快的机房,ping值一般为195MS,是做web服务器的首选机房,深受中小站长的欢迎! 我们平时测试美国服务器的速度,都是通过 ...