⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inifile.h

📁 EVC(嵌入式VC++)发的用于串口通信的程序
💻 H
字号:
// IniFile.h: interface for the CIniFile class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_INIFILE_H__16C92A6A_E0DC_4BD6_A9B5_1FCD6112ED1C__INCLUDED_)
#define AFX_INIFILE_H__16C92A6A_E0DC_4BD6_A9B5_1FCD6112ED1C__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "vector"


const int BUFFLINE=512;
extern class CIniFile m_iniFile;//声明外部对象,给其他类文件中调用
class CIniFile  
{
protected:
	struct Key
	{
		WCHAR strLine[BUFFLINE];  //名称
		WCHAR strVal[BUFFLINE];  //内容
		bool bValid;  //是否有效
		Key()
		{
			bValid=false;
			memset(strLine,0,BUFFLINE*sizeof(WCHAR));
			memset(strVal,0,BUFFLINE*sizeof(WCHAR));
		}
		void SetVal(WCHAR *sVal)
		{

			TrimLeft(sVal,_T(''));
			TrimRight(sVal,_T(''));
			wcscpy(strVal,sVal);
			int s1=0,s2=0;
			s1=Find(strLine,_T("="),1);
			s2=Find(strLine,_T(";"),1);
			if(s2>0)
			{
				wsprintf(sVal,_T("%s%s"),sVal,strLine+s2);
			}
			wcscpy(strLine+s1+1,sVal);
		
		}
	};

	struct Section
	{
		WCHAR strLine[BUFFLINE];  //名称
		std::vector<Key*> arKey;
		HANDLE m_hHeap;//
		bool bValid;//是否有效
		Section(HANDLE hHeap)
		{
			bValid=false;
			m_hHeap=hHeap;
			memset(strLine,0,BUFFLINE*sizeof(WCHAR));
			arKey.clear();
		}

		Section()
		{
			bValid=false;
			memset(strLine,0,BUFFLINE*sizeof(WCHAR));
			arKey.clear();
		}

		~Section()
		{
			int i=0;
			for(i=0;i<arKey.size();i++)
			{
				Key *pKey=arKey[i];
				if(pKey)
					HeapFree(m_hHeap,HEAP_NO_SERIALIZE,pKey);
			}
		}

		Key* AddKey(WCHAR *sLine)
		{
			int nLen=sizeof(Key);
			Key *pKey=(Key*)HeapAlloc( m_hHeap, HEAP_ZERO_MEMORY, sizeof(Key));
			if(pKey)
			{
				wcscpy(pKey->strLine,sLine);
				arKey.push_back(pKey);
			}
			else
				return NULL;
			int nPos=CIniFile::Find(sLine,_T("="),1);
			if (sLine[0] == _T('\n') || sLine[0] == _T(';') || nPos<0)//注释或空行
			{
				pKey->bValid=false;
			}
			else
			{
				//解析值
				pKey->bValid=true;
				int p1=CIniFile::Find(sLine,_T(";"),1);
				if(p1<0)
					wcscpy(pKey->strVal,sLine+nPos+1);
				else if(p1>nPos)
				{
					wcsncpy(pKey->strVal,sLine+nPos+1,p1-nPos);
				}
				else
				{
					pKey->bValid=false;  //=号被注释
				}
				
			}
			return pKey;
		}
	};
friend struct Section;
friend struct Key;
public:
	CIniFile();
	virtual ~CIniFile();
	void GetPath(WCHAR *strPath);
	bool LoadIniFile(WCHAR *strName);
	bool WriteKeyString(WCHAR * strSection, WCHAR * strKey, WCHAR * strValue);
	bool GetKeyString(WCHAR * strSection ,WCHAR * strKey,WCHAR * strDefault,WCHAR *strResult);

//protected:
	void SaveIniFile();
	void RemoveAll();
	Section *FindSection(WCHAR *strSection);
	Key *FindKey(Section *pSection,WCHAR *strKey);
	static int  Find( WCHAR *string, WCHAR *strCharSet,int nStart );
	static void Mid(WCHAR* string,int nStart,int nLength,WCHAR *strDesc);
	static void TrimRight(WCHAR *string ,int c);
	static void TrimLeft(WCHAR *string ,int c);
	static int CompareNoCase(WCHAR *string1,WCHAR *string2);
	static void StringToUpper(WCHAR *string);
	static void Replace(WCHAR *string,WCHAR* strFind,WCHAR* strCharSet);
	static int ReverseFind(WCHAR* string,WCHAR* strFind);

protected:
	CRITICAL_SECTION  m_hCS;
	HANDLE hHeap;//
	std::vector<Section*> m_arSection; 
	WCHAR m_strFile[256];//INI文件名
	WCHAR m_strPath[256];  
	
};

#endif // !defined(AFX_INIFILE_H__16C92A6A_E0DC_4BD6_A9B5_1FCD6112ED1C__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -