迷你5207专属论坛

注册

 

发新话题 回复该主题

[魅族M8] M8SDK学习系列之公共函数 [复制链接]

发表者
写程序积累资源库是很重要的,将一些经常用到的而且是通用的功能进行封装后,在经后的开发中直接拿来用即是了,可以省去很多的时间。在学习M8sdk的过程中由于写一些程序需要用到些常用的功能,比如检查文件是否存在?目录是否创建等。。于是就开始建立了一个单元专门来维护 这些函数。

目前只是几个已经用到的函数,由于对C++不熟,在写这些函数时也是郁闷了一陈,主要就是集中在指针和字符串两个方面,字符串在C++的处理中真的是太弱了,也许是接触的不深,但就目前看到的C++中关于字符串的定义及各种处理就明白,C++的字符处理能力都是后天生成的。先天的不足让我们这些笨的人真的是吃了大苦头。。希望大家在学习的过程中多注意一下,C++中的指针和字符串对入门者将会是个非常头痛的问题。当然也许对你不是问题。

开始放出公共函数库代码,我分别建了CPubFunction.h和CPubFunction.cpp文件,先贴出CPubFunction.h文件:
  1. /************************************************************************/
  2. /*
  3. * 版权所有 点滴论坛([url]http://www.mini188.com[/url])
  4. *
  5. * 公共函数
  6. * Author:                5207
  7. * Create:            2009-02-20
  8. */
  9. /************************************************************************/
  10. #pragma once

  11. //检查目录是否存在
  12. //参数:
  13. //    TCHAR* filepath : 待检查的目录
  14. //返回值: 目录存在返回true, 否则为false;
  15. bool DirectoryExists(TCHAR* filepath);

  16. //检查文件否存在
  17. //参数:
  18. //    TCHAR* filename: 待检查的文件完整路径
  19. //返回值: 存在返回true, 否则为false;
  20. bool FileExists(TCHAR* filename);

  21. //获取应用程序目录
  22. //参数:
  23. //    LPTSTR szPath: 返回应用程序目录
  24. //返回值: 成功返回true, 否则为false;
  25. bool GetCurrentPath(LPTSTR szPath);

  26. //获取一个Guid(字符串)
  27. //参数:
  28. //    TCHAR **strGuid: 返回的GUID字符串
  29. //返回值: 成功true, 否则为false;
  30. bool GetGuidString(TCHAR **strGuid);
复制代码
其中的DirectoryExists和FileExsits两个函数是我根据Delphi中的代码转换过来的,基本相同都是API完成的。而GetCurrentPath函数是在网上找了段代码,后经修改得到的,这个函数也弄了半天。而GetGuidString也是学习了下DelphiVCL的代码改写而成。经过测试都能使用。

另外将实现部分.CPP代码也贴出来:
  1. #include "stdafx.h"
  2. #include "CPubFunction.h"

  3. //目录是否存在的检查
  4. bool DirectoryExists(TCHAR* filepath)
  5. {
  6.         int code = GetFileAttributes(filepath);
  7.         return ((code != -1) && (FILE_ATTRIBUTE_DIRECTORY && code != 0));
  8. }

  9. //检查文件否存在
  10. bool FileExists(TCHAR* filename)
  11. {
  12.   WIN32_FIND_DATA FindFileData;
  13.   HANDLE hFind;

  14.   hFind = FindFirstFile(filename, &FindFileData);
  15.   if (hFind == INVALID_HANDLE_VALUE)
  16.   {
  17.     return false;
  18.   }
  19.   else
  20.   {
  21.     FindClose(hFind);
  22.     return true;
  23.   }
  24. }

  25. //获取应用程序目录
  26. bool GetCurrentPath(LPTSTR szPath)  
  27. {  
  28.         HMODULE handle = GetModuleHandle(NULL);
  29.         DWORD dwRet = GetModuleFileName(handle, szPath, MAX_PATH);
  30.         if (dwRet == 0)
  31.         {
  32.                 return false;
  33.         }
  34.         else
  35.         {
  36.                 TCHAR* p = szPath;
  37.                 while(*p)++p; //let p point to '\0'  
  38.                 while('\\' != *p)--p; //let p point to '\\'  
  39.                 ++p;
  40.                 *p = '\0'; //get the path
  41.                 return true;  
  42.         }
  43. }

  44. //获取Guid
  45. bool GetGuidString(TCHAR **strGuid)
  46. {
  47.         GUID theGuid;
  48.         LPOLESTR pstrGuid;

  49.         CoCreateGuid(&theGuid);
  50.         if (StringFromCLSID(theGuid, &pstrGuid) == 0)
  51.         {
  52.                 *strGuid = pstrGuid;
  53.                 //CoTaskMemFree(pstrGuid);
  54.                 return true;
  55.         }
  56.         else
  57.                 return false;
  58. }
复制代码
具体代码功能就不作解释了,如果有疑问可以回帖。

调用的代码也贴出:
  1. //保存
  2. bool CM8NoteEditWnd::SaveNoteItem()
  3. {
  4.         CMzString newFileName;
  5.         TCHAR szPath[MAX_PATH] = L"";
  6.         if (m_EditType == etAdd)
  7.         {
  8.                 if (!GetCurrentPath(szPath))
  9.                         return false;

  10.                 TCHAR *szGuid;
  11.                 GetGuidString(&szGuid);
  12.                 CMzString mzGuid = szGuid;
  13.                 ... ...
  14.         }

  15.         if (!FileExists(newFileName))
  16.         {
  17.                 return false;
  18.         }
  19.         else
  20.         {
  21.                 ... ...
  22.                 return true;
  23.         }
  24. }
复制代码
下面的代码是用于DirectoryExists的调用示例
  1. CMzString tmpDataDir = L"\\Program Files\\Mini188\\";
  2. //检查Data文件夹是否存在,不存在则创建
  3. if (!DirectoryExists(tmpDataDir))
  4. {
  5.    //创建Data目录
  6.    CreateDirectory(tmpDataDir, NULL);
  7. }
复制代码

作者:5207
出处:http://www.mini188.com
本文版权归作者所有,欢迎转载请注明出处,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
本主题由 皇帝 5207 于 2009-7-4 11:50:18 执行 主题分类 操作
分享 转发
相信与不相信都是矛盾的.  5207宣!欢迎您来到点滴论坛
TOP
发新话题 回复该主题