一个开源的Asp.net2.0博客系统
- byte src[] = {(byte)228,(byte)184,(byte)173,(byte)229,(byte)155,(byte)189,0}; //中国
- int ucCharLen = MultiByteToWideChar(CP_UTF8,0,(LPCSTR)src,-1,NULL,0);
- LPWSTR wbuf = new WCHAR[ucCharLen];
- memset(wbuf,0,sizeof(wbuf));
- MultiByteToWideChar(CP_UTF8,0,(LPCSTR)src,-1,wbuf,ucCharLen);
- byte* buf = NULL;
- int byteLength = WideCharToMultiByte(CP_UTF8,0,(LPCWSTR)wbuf,-1,NULL,0,NULL,NULL);
- buf = new byte[byteLength];
- memset(buf,0,sizeof(buf));
- WideCharToMultiByte(CP_UTF8,0,(LPCWSTR)wbuf,-1,(LPSTR)buf,byteLength,NULL,NULL);
- delete buf;
- delete wbuf;
在用进行文件操作时,少不了和目录的递归打交道,但我一般认为.递归算法比较慢.如果可以采用非递归实现,就不要递归.
在非递归算法中,一般我们用一个队列来保存相应的数据.一会列出代码.
还有一个问题,我们递归目录,无非是想对文件进行操作,或者想得到文件的一个列表. 这时,你可以会采用回调函数. 但在我看来,还有更好的实现文案,让"回调"函数是一个对象,就既可以实现回调,也可以保存数据,这就是C++语言的仿函数.今天,我们就用仿函数来对指 定的文件进行操作,例如修改文件,或者得到文件列表.
先看一下递归函数的实现:
- //增大音量:
- keybd_event(VK_VOLUME_UP,MapVirtualKey(VK_VOLUME_UP,0),KEYEVENTF_EXTENDEDKEY,0);
- keybd_event(VK_VOLUME_UP,MapVirtualKey(VK_VOLUME_UP,0),KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);
- //减小音量:
- keybd_event(VK_VOLUME_DOWN,MapVirtualKey(VK_VOLUME_DOWN,0),KEYEVENTF_EXTENDEDKEY,0);
- keybd_event(VK_VOLUME_DOWN,MapVirtualKey(VK_VOLUME_DOWN,0),KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);
- //静音:
- keybd_event(VK_VOLUME_MUTE,MapVirtualKey(VK_VOLUME_MUTE,0),KEYEVENTF_EXTENDEDKEY,0);
- keybd_event(VK_VOLUME_MUTE,MapVirtualKey(VK_VOLUME_MUTE,0),KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);
1. 添加 UNICODE 和 _UNICODE 预处理定义
位置:Project Settings -> C/C++ -> Preprocessor definitions
添加了这两个定义后,MFC的一些内置类型如 TCHAR、CString 都将转为支持宽字符类型(wchar_t)
2. 使用宽字符相关类型,如:char -> TCHAR、char * -> LPTSTR、const char * -> LPCTSTR
3. 对字符串常量使用 _T() 宏
4. 替换C库中的中字符串操作函数,如 strlen -> _tcslen、strcmp -> _tcscmp 等,类似的还有C库中字符串与数字的转换函数,如 atoi -> _ttoi、itoa -> _itot 等。
5. 将 Project Settings -> Link -> Output -> Entry Point 设为 wWinMainCRTSTartup,否则会有如下错误:msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
6. C++标准库中的string,有对应的宽字符版本wstring,两者均为basic_string的特化版本,可在StdAfx.h中添加:
- #ifdef _UNICODE
- #define tstring wstring
- #else
- #define tstring string
- #endif
然后在代码中使用 tstring 即可,类似的还有 fstream/wfstream、ofstream/wofstream 等
7. 宽字符版本的英文字符仍可直接与整型值进行比较,如:
CString s = _T("ABC");
ASSERT(s[0] == 'A');
8. 对于仍需使用ANSI字符串的地方,如第三方类库的接口,仍可继续使用;如需进行Unicode字符串和ANSI字符串的互转换,可使用 MultiByteToWideChar 和 WideCharToMultiByte
1、CFileFind类的声明文件保存在afx.h头文件中。
2、该类的实现的功能:执行本地文件的查找(查找某个具体的文件,查找某类文件x*.x*,查找所有文件*.*)
3、CFileFind类是CGopherFileFind和CFtpFileFind类的基类。
4、CFileFind类的构造函数::CFileFind()和关闭函数::Close()我会成对使用。
5、CFileFind类的成员函数我根据其操作特性划分为3类:查找操作类、获得文件属性类、判断文件属性类。(下面我先进行函数罗列并没有完整的描述函数的参数)
查找操作类
::FindFile();
::FindNextFile();
获得文件属性类
::GetCreationTime();
::GetLastAccessTime();
::GetLastWriteTime();
::GetFileName();
::GetRoot();
::GetFilePath();
::GetFileTitle();
::GetFileURL();
::GetLength();
判断文件属性类
::IsArchived();
::IsCompressed();
::IsDirectory();
::IsDots();
::IsHidden();
::IsNormal();
::IsReadOnly();
::IsSystem();
::IsTemporary();
::MatchesMask();
6、CFileFind类中成员函数使用应注意的顺序
在创建了CFileFind对象后,先执行::FindFile()函数,然后执行::FindNextFile(),然后选择执行(获得文件属性类)的函数或者(判断文件属性类)函数。
7、CFileFind类成员函数的详细分析:
C++位操作包括两种:传统的C语言方式的位操作和C++中利用bitset容器的位操作
