当前位置: 首页 > news >正文

交流平台网站怎么做网站建设哪家效益快

交流平台网站怎么做,网站建设哪家效益快,在唐山做网站多少钱,秦皇岛网站制作源码时间紧张#xff0c;先记一笔#xff0c;后续优化与完善。 Windows下的ini文件的读取可以应用系统提供的api来实现 GetPrivateProfileString GetPrivateProfileInt ... 现实应用中, 如果不应用一种同一的方法来包装一下会让源代码看起来很乱。 所以,须要计划一个便利#xf…时间紧张先记一笔后续优化与完善。     Windows下的ini文件的读取可以应用系统提供的api来实现          GetPrivateProfileString     GetPrivateProfileInt     ...     现实应用中, 如果不应用一种同一的方法来包装一下会让源代码看起来很乱。     所以,须要计划一个便利雅观直观的配置文件操作类          准则是代码难看轻易维护          需求:     直观的调用形式     实现潜规则     满足各类数据(实现api经常应用的数据类型)           解释:      直观的调用形式是什么意思 以减少键盘输入和见文知意为准则的计划方式把长函数名变为符号。用符号来表示操作 潜规则 在配置ini访问中的潜规则是 1. Wiki上对ini的定义     INI文件有节的观点节用 [] 包围,类似数据中的表名称,如[startup]     名称/值对,类似数据库表中的字段,如TargetIP10.0.0.1     注释, 以;为注释的开始到行尾如MenuOneFile... ; 菜单的第一项文字描述 2. Windows系统中操作ini文件时有#扫尾的行是疏忽的,如: #对打印机的设置 3. 可配置是否疏忽Key的大小写 4. 符合语义的读取和写入 在windows api下GetPrivateProfile/WritePrivateProfileXXXX在调用该方法时同步执行对ini文件的操作 满足各类数据,在ini中经常应用的数据有两种,字符串和整型数据,满足所有数据类型明显不现实,可以在之后根据不同须要进行扩展计划应用方法: 1.  读取 CIniAccessor accessor(_T(config.ini)); std::wstring strMenuOne accessor[_T(startup)][_T(MenuOne)](_T(DefaultMenuItem)); 2. 写入 CIniAccessor accessor(_T(config.ini)); accessor[_T(startup)][_T(TargetIP)] _T(10.0.0.100);3. 更新 CIniAccessor accessor(_T(config.ini)); accessor.Update(); // 从磁盘上更新 accessor.Commit(); // 写入磁盘上面是数据结构 每日一道理 无知者为梦想中的虚幻而苦苦等待换回的不是所求的而是岁月在脸上留下的印痕一事无成的人一生便是虚度。生活中与其花时间去等待不如加快步伐去追寻理想试着与时间赛跑也许身躯、心理会感到劳累但这样的生活毕竟是充实的。 基础类typedef struct tagAccessorData {union VALUETYPE{LONG longValue;TCHAR * pszValue;}value;enum{TYPE_EMPTY, TYPE_LONG, TYPE_CHAR}valuetype;tagAccessorData():valuetype(TYPE_EMPTY){} }ACCESSORDATA; 辅助工具类 class CCoAccessorImpl:public ACCESSORDATA { private: TCHAR m_szTemp[30]; public:CCoAccessorImpl(){valuetype TYPE_EMPTY;value.longValue 0;}CCoAccessorImpl(const CCoAccessorImpl acc){valuetype acc.valuetype;if(acc.valuetype TYPE_CHAR){value.pszValue new TCHAR[_tcslen(acc.value.pszValue) 1];ZeroMemory(value.pszValue, sizeof(TCHAR) * (_tcslen(acc.value.pszValue) 1));_tcscpy(value.pszValue, acc.value.pszValue);}else{value.longValue acc.value.longValue;}}CCoAccessorImpl(const LONG lValue){valuetype TYPE_LONG;value.longValue lValue;}CCoAccessorImpl(LPCTSTR lpszValue){valuetype TYPE_CHAR;value.pszValue new TCHAR[_tcslen(lpszValue) 1];ZeroMemory(value.pszValue, sizeof(TCHAR) * (_tcslen(lpszValue) 1));_tcscpy(value.pszValue, lpszValue);}~CCoAccessorImpl(){if(valuetype TYPE_CHAR) delete [] value.pszValue;}CCoAccessorImpl operator (const CCoAccessorImpl acc){if(valuetype TYPE_CHAR) delete [] value.pszValue;value.longValue 0;valuetype acc.valuetype;if(acc.valuetype TYPE_CHAR){value.pszValue new TCHAR[_tcslen(acc.value.pszValue) 1];ZeroMemory(value.pszValue, sizeof(TCHAR) * (_tcslen(acc.value.pszValue) 1));_tcscpy(value.pszValue, acc.value.pszValue);}else{value.longValue acc.value.longValue;}return *this;}CCoAccessorImpl operator (const LONG lValue){if(valuetype TYPE_CHAR) delete [] value.pszValue;valuetype TYPE_LONG;value.longValue lValue;return *this;}CCoAccessorImpl operator (LPCTSTR lpszValue){if(valuetype TYPE_CHAR) delete [] value.pszValue;valuetype TYPE_CHAR;value.pszValue new TCHAR[_tcslen(lpszValue) 1];ZeroMemory(value.pszValue, sizeof(TCHAR) * (_tcslen(lpszValue) 1));_tcscpy(value.pszValue, lpszValue);return *this;}operator LPCTSTR (){ switch(valuetype){ case TYPE_LONG: return _ltot(value.longValue, m_szTemp, 10);case TYPE_CHAR: return value.pszValue;}return _T();}operator LONG (){ switch(valuetype){case TYPE_LONG:case TYPE_EMPTY:return value.longValue;}return _ttol(value.pszValue);}CCoAccessorImpl operator ()(LPCTSTR lpsz) //default value{if(valuetype TYPE_EMPTY) return CCoAccessorImpl(lpsz);return *this;}CCoAccessorImpl operator ()(LONG lValue) //default value{if(valuetype TYPE_EMPTY) return CCoAccessorImpl(lValue);return *this;}}; typedef std::basic_stringTCHAR TCharArray;struct less {bool operator()(const TCharArray _Left, const TCharArray _Right) const{ return _tcsicmp(_Left.c_str(), _Right.c_str()) 0;} };templateclass ValueType, BOOL bSensitive class CKeyValueArray:public std::mapTCharArray, ValueType, less { public:CKeyValueArray(){}~CKeyValueArray(){}ValueType operator[](TCharArray charArray){if(!bSensitive) _tcsupr((TCHAR*)charArray.data());return std::mapTCharArray, ValueType, less::operator[](charArray);} }; // 读文件操作 templateclass Storage struct iniparser {BOOL operator()(Storage store, LPCTSTR lpszFilePath){HANDLE hFile CreateFile(lpszFilePath, // file to openGENERIC_READ, // open for readingFILE_SHARE_READ, // share for readingNULL, // default securityOPEN_EXISTING, // existing file onlyFILE_ATTRIBUTE_NORMAL, // normal fileNULL); // no attr. templateif (hFile INVALID_HANDLE_VALUE) { return FALSE; }TCHAR sz[2] {0};DWORD dwRead 0;TCharArray tcaLine;TCharArray tcaSectionName;struct foo{static void parse(Storage store, TCharArray tcaSectionName, TCharArray tcaLine){if(!tcaLine.size()) return;// parse []TCHAR szComment[MAX_PATH] {0};if(tcaLine.at(0) _T(#)) return;TCharArray sSec;if(_stscanf(tcaLine.c_str(), _T([%[^]]]), (TCHAR*)sSec.assign(MAX_PATH,0).data())){tcaSectionName sSec;}else{// parse key valueTCHAR szKey[MAX_PATH] {0};TCHAR szValue[MAX_PATH] {0};if(2 _stscanf(tcaLine.c_str(), _T(%[^]%[^\0]), szKey, szValue)) {store[tcaSectionName][szKey] szValue;}}}};while(ReadFile(hFile, sz, sizeof(TCHAR),dwRead, NULL)){if(!dwRead) break;if(!(sz[0] _T(\r) || sz[0] _T(\n))) {tcaLine.push_back(sz[0]);continue;}foo::parse(store, tcaSectionName, tcaLine);tcaLine.clear();tcaLine.reserve(); }CloseHandle(hFile);foo::parse(store, tcaSectionName, tcaLine); return TRUE;} }; // 写文件操作 templateclass Storage struct inipersistor {BOOL operator()(Storage store, LPCTSTR lpszFilePath){HANDLE hFile CreateFile(lpszFilePath, // file to openGENERIC_WRITE, // open for readingFILE_SHARE_WRITE, // share for readingNULL, // default securityOPEN_ALWAYS, // existing file onlyFILE_ATTRIBUTE_NORMAL, // normal fileNULL); // no attr. templateif (hFile INVALID_HANDLE_VALUE) { return FALSE; }for(Storage::iterator it store.begin();it ! store.end();it){TCharArray tcaSectionName (*it).first;Storage::mapped_type kva (*it).second;DWORD dwWritten 0;WriteFile(hFile, _T([), sizeof(TCHAR), dwWritten, NULL); WriteFile(hFile, tcaSectionName.c_str(), sizeof(TCHAR) * tcaSectionName.size(), dwWritten, NULL);WriteFile(hFile, _T(]\r\n), sizeof(TCHAR) * 3, dwWritten, NULL);for(Storage::mapped_type::iterator itKeyVal kva.begin();itKeyVal ! kva.end();itKeyVal){TCharArray tcaKey (*itKeyVal).first;TCharArray tcaVal (*itKeyVal).second;WriteFile(hFile, tcaKey.c_str(), sizeof(TCHAR) * tcaKey.size(), dwWritten, NULL);WriteFile(hFile, _T(), sizeof(TCHAR), dwWritten, NULL); WriteFile(hFile, tcaVal.c_str(), sizeof(TCHAR) * tcaVal.size(), dwWritten, NULL);WriteFile(hFile, _T(\r\n), sizeof(TCHAR) * 2, dwWritten, NULL);}}CloseHandle(hFile);return TRUE;} }; 访问类templateclass ValueType CCoAccessorImpl, BOOL bSensitive FALSE,class Parser iniparserstd::mapTCharArray, CKeyValueArrayValueType,bSensitive,less ,class Persistor inipersistorstd::mapTCharArray, CKeyValueArrayValueType,bSensitive,less class TIniAccessor { public:private:Parser _parser;Persistor _persistor;TCharArray m_szFileName; public:TIniAccessor(LPCTSTR lpsz):_parser(Parser()),_persistor(Persistor()){m_szFileName lpsz;_parser(m_sectionarray, m_szFileName.c_str());}BOOL Update(){return _parser(m_sectionarray, m_szFileName.c_str());}BOOL Commit(LPCTSTR lpszSaveIniFile NULL){TCharArray tca m_szFileName;if(lpszSaveIniFile) tca lpszSaveIniFile;return _persistor(m_sectionarray, tca.c_str());}~TIniAccessor(){} private: typedef std::mapTCharArray, CKeyValueArrayValueType,bSensitive, less SectionArray;SectionArray m_sectionarray; public: CKeyValueArrayValueType,bSensitive operator [](TCharArray charArray){if(!bSensitive) _tcsupr((TCHAR*)charArray.data());return m_sectionarray[charArray];} }; 访问类typedef TIniAccessor CIniAccessor;   文章结束给大家分享下程序员的一些笑话语录 自行车 一个程序员骑着一个很漂亮的自行车到了公司另一个程序员看到了他问 到“你是从哪搞到的这么漂亮的车的” 骑车的那个程序员说 “我刚从那边过来 有一个漂亮的姑娘骑着这个车过来 并停在我跟前把衣服全脱了然后对我说‘你想要什么都可以’”。 另一个程序员马上说到 “你绝对做了一个正确的选择 因为那姑娘的衣服你 并不一定穿得了”。 --------------------------------- 原创文章 By 文件和读取--------------------------------- 转载于:https://www.cnblogs.com/jiangu66/archive/2013/06/01/3113075.html
http://www.sadfv.cn/news/202599/

相关文章:

  • 网站备案账号启迪网站建设
  • 网站建设鼠标点击变色怎么弄佛山市企业网站seo点击软件
  • 网站开发的分工网站开发服务转包合同范本
  • 网站建设的特点天元建设集团有限公司商业承兑
  • 百度免费建立网站建站之星使用教程
  • 阿里网站建设费用wordpress底部信息后台修改
  • 网站名称和域名不一致免费注册域名邮箱
  • 做网站做百度竞价赚钱cn域名
  • 做画册好的网站商城小程序 wordpress
  • 济南企业营销型网站建设怎么做福彩网站
  • 手机触屏版网站管理系统专业网站策划公司
  • 可以做婚礼视频的网站广州天河网站建设公司
  • 苏州市做网站简航app是什么
  • 深圳网站建设平台绿色蔬菜网站模板
  • 网站门户是什么意思python django 做 网站
  • a站是指哪个网站电脑编程培训
  • 青岛市黄岛区城市建设局 网站营销策划方案范文
  • 网站设计怎么做ppt答辩怎么让自己的网站被百度收录
  • 网站建设有什么意见wordpress写文章怎么添加图片
  • 织梦网站如何做地区分站学校建设网站费用申请
  • 广告网站模板免费下载软件app开发公司哪家好
  • 网站设计和建设自考题论坛网站怎么推广
  • 深圳建网站哪个公司wordpress 755权限
  • 杭州seo相关网站做网页需要的素材
  • 注册网站域名后免费建站广西建设监理协会官方网站
  • 自建网站营销公司代理记账企业
  • 网站维护好的方法道滘网站仿做
  • 公司网站建设技术方案wordpress z
  • 企业网站 源码 开源邢台网站制作多少钱
  • vs2008可以做网站网站移动端就是app吗