天天看點

用于讀寫 INI 配置檔案的 C++ 類

代碼] IniReader.h

01

Source: http://www.codeproject.com/Articles/10809/A-Small-Class-to-Read-INI-File

02

03

#ifndef INIREADER_H

04

#define INIREADER_H

05

06

#include <windows.h>

07

08

class

CIniReader

09

{

10

public

:

11

CIniReader(

LPCTSTR

szFileName);

12

int

ReadInteger(

LPCTSTR

szSection,

LPCTSTR

szKey,

int

iDefaultValue);

13

float

ReadFloat(

LPCTSTR

szSection,

LPCTSTR

szKey,

float

fltDefaultValue);

14

bool

ReadBoolean(

LPCTSTR

szSection,

LPCTSTR

szKey,

bool

bolDefaultValue);

15

LPTSTR

ReadString(

LPCTSTR

szSection,

LPCTSTR

szKey,

LPCTSTR

szDefaultValue);

16

private

:

17

TCHAR

m_szFileName[255];

18

};

19

#endif //INIREADER_H

[代碼] IniReader.cpp

01

Source: http://www.codeproject.com/Articles/10809/A-Small-Class-to-Read-INI-File

02

03

#include "IniReader.h"

04

#include <iostream>

05

#include <windows.h>

06

07

CIniReader::CIniReader(

LPCTSTR

szFileName)

08

{

09

memset

(m_szFileName, 0x00,

sizeof

(m_szFileName));

10

memcpy

(m_szFileName, szFileName, _tcslen(szFileName)*

sizeof

(

TCHAR

));

11

}

12

int

CIniReader::ReadInteger(

LPCTSTR

szSection,

LPCTSTR

szKey,

int

iDefaultValue)

13

{

14

int

iResult = GetPrivateProfileInt(szSection,  szKey, iDefaultValue, m_szFileName);

15

return

iResult;

16

}

17

float

CIniReader::ReadFloat(

LPCTSTR

szSection,

LPCTSTR

szKey,

float

fltDefaultValue)

18

{

19

TCHAR

szResult[255];

20

TCHAR

szDefault[255];

21

float

fltResult;

22

_stprintf_s(szDefault, 255, TEXT(

"%f"

),fltDefaultValue);

23

GetPrivateProfileString(szSection,  szKey, szDefault, szResult, 255, m_szFileName);

24

fltResult =  (

float

)_tstof(szResult);

25

return

fltResult;

26

}

27

bool

CIniReader::ReadBoolean(

LPCTSTR

szSection,

LPCTSTR

szKey,

bool

bolDefaultValue)

28

{

29

TCHAR

szResult[255];

30

TCHAR

szDefault[255];

31

bool

bolResult;

32

_stprintf_s(szDefault, 255, TEXT(

"%s"

), bolDefaultValue? TEXT(

"True"

) : TEXT(

"False"

));

33

GetPrivateProfileString(szSection, szKey, szDefault, szResult, 255, m_szFileName);

34

bolResult =  (_tcscmp(szResult, TEXT(

"True"

)) == 0 ||

35

_tcscmp(szResult, TEXT(

"true"

)) == 0) ?

true

:

false

;

36

return

bolResult;

37

}

38

LPTSTR

CIniReader::ReadString(

LPCTSTR

szSection,

LPCTSTR

szKey,

LPCTSTR

szDefaultValue)

39

{

40

LPTSTR

szResult =

new

TCHAR

[255];

41

memset

(szResult, 0x00,

sizeof

(szResult));

42

GetPrivateProfileString(szSection,  szKey, szDefaultValue, szResult, 255, m_szFileName);

43

return

szResult;

44

}

[代碼] IniWriter.h

01

Source: http://www.codeproject.com/Articles/10809/A-Small-Class-to-Read-INI-File

02

03

#ifndef INIWRITER_H

04

#define INIWRITER_H

05

06

#include <windows.h>

07

08

class

CIniWriter

09

{

10

public

:

11

CIniWriter(

LPCTSTR

szFileName);

12

void

WriteInteger(

LPCTSTR

szSection,

LPCTSTR

szKey,

int

iValue);

13

void

WriteFloat(

LPCTSTR

szSection,

LPCTSTR

szKey,

float

fltValue);

14

void

WriteBoolean(

LPCTSTR

szSection,

LPCTSTR

szKey,

bool

bolValue);

15

void

WriteString(

LPCTSTR

szSection,

LPCTSTR

szKey,

LPCTSTR

szValue);

16

private

:

17

TCHAR

m_szFileName[255];

18

};

19

#endif //INIWRITER_H

[代碼] IniWriter.cpp

01

Source: http://www.codeproject.com/Articles/10809/A-Small-Class-to-Read-INI-File

02

03

#include "IniWriter.h"

04

#include <iostream>

05

#include <windows.h>

06

07

CIniWriter::CIniWriter(

LPCTSTR

szFileName)

08

{

09

memset

(m_szFileName, 0x00,

sizeof

(m_szFileName));

10

memcpy

(m_szFileName, szFileName, _tcslen(szFileName)*

sizeof

(

TCHAR

));

11

}

12

void

CIniWriter::WriteInteger(

LPCTSTR

szSection,

LPCTSTR

szKey,

int

iValue)

13

{

14

TCHAR

szValue[255];

15

_stprintf_s(szValue, 255, TEXT(

"%d"

), iValue);

16

WritePrivateProfileString(szSection,  szKey, szValue, m_szFileName);

17

}

18

void

CIniWriter::WriteFloat(

LPCTSTR

szSection,

LPCTSTR

szKey,

float

fltValue)

19

{

20

TCHAR

szValue[255];

21

_stprintf_s(szValue, 255, TEXT(

"%f"

), fltValue);

22

WritePrivateProfileString(szSection,  szKey, szValue, m_szFileName);

23

}

24

void

CIniWriter::WriteBoolean(

LPCTSTR

szSection,

LPCTSTR

szKey,

bool

bolValue)

25

{

26

TCHAR

szValue[255];

27

_stprintf_s(szValue, 255, TEXT(

"%s"

), bolValue ? TEXT(

"True"

) : TEXT(

"False"

));

28

WritePrivateProfileString(szSection,  szKey, szValue, m_szFileName);

29

}

30

void

CIniWriter::WriteString(

LPCTSTR

szSection,

LPCTSTR

szKey,

LPCTSTR

szValue)

31

{

32

WritePrivateProfileString(szSection,  szKey, szValue, m_szFileName);

33

}

[代碼] main.cpp

01

#if defined(UNICODE) || defined(_UNICODE)

02

#define tcout std::wcout

03

#else

04

#define tcout std::cout

05

#endif

06

07

#include <iostream>

08

#include <windows.h>

09

#include "IniWriter.h"

10

#include "IniReader.h"

11

12

int

_tmain(

int

argc, _TCHAR* argv[])

13

{

14

CIniWriter iniWriter(TEXT(

".\\initest.ini"

));

15

iniWriter.WriteString(TEXT(

"Setting"

), TEXT(

"Name"

), TEXT(

"jianxx"

));  

16

iniWriter.WriteInteger(TEXT(

"Setting"

), TEXT(

"Age"

), 27);

17

iniWriter.WriteFloat(TEXT(

"Setting"

), TEXT(

"Height"

), 1.82f);

18

iniWriter.WriteBoolean(TEXT(

"Setting"

), TEXT(

"Marriage"

),

false

); 

19

CIniReader iniReader(TEXT(

".\\initest.ini"

));

20

LPTSTR

szName = iniReader.ReadString(TEXT(

"Setting"

), TEXT(

"Name"

), TEXT(

""

));  

21

int

iAge = iniReader.ReadInteger(TEXT(

"Setting"

), TEXT(

"Age"

), 25);

22

float

fltHieght = iniReader.ReadFloat(TEXT(

"Setting"

), TEXT(

"Height"

), 1.80f);

23

bool

bMarriage = iniReader.ReadBoolean(TEXT(

"Setting"

), TEXT(

"Marriage"

),

true

);

24

25

tcout<<

"Name:"

<<szName<<std::endl

26

<<

"Age:"

<<iAge<<std::endl

27

<<

"Height:"

<<fltHieght<<std::endl

28

<<

"Marriage:"

<<bMarriage<<std::endl;

29

delete

szName; 

30

return

1;  

31

}