1、 CFileFind类
MFC类CFilefind执行本地文件查找,是CGopherFileFind和CFtpFileFind的基类;后两个类用于Internet文件查找。CFileFind包括的成员函数有开始查找、定位文件、返回标题名或路径;对于Internet查找来说,GetFileURL返回文件的URL。
CFileFind是为另两类查找特殊服务器设计的MFC类的基类,CGopherFileFind在Gopher服务器上工作,CFtpFileFind在FTP服务器上工作,这些类为用户查找文件提供了一种无缝机制,与服务器协议、文件类型、地点、本地机器或远程服务器无关。
属性:
GetLength获取找到文件的长度,以字节为单位;
GetFileName获取找到文件的名字;
GetFilePath找到文件的全路径;
GetFileTitle获取找到文件的标题,标题不包括扩展内容;
GetFileURL获取找到文件的URL,包括文件路径;
GetRoot获取找到文件根目录;
GetCreationTime获取文件创建时间;
GetLastAccessTime获取文件最后一次打开的时间;
GetLastWriteTime文件最后改变和存储的时间;
MatchesMask指定要找的文件的属性;
IsDots查看文件名是否是包含"."或"..",以表明它的确是一个目录;
IsReadOnly文件是否是只读;
IsDirectory文件是否是目录;
IsCompressed文件是否是压缩;
IsSystem文件是否是系统文件;
IsHidden文件是否是隐藏;
IsTemporary文件是否是临时的;
IsNormal文件是否是常规的(无其它属性);
IsArchived文件是否是档案。
操作:
Close关闭查找请求;
FindFile查找一个目录中的指定文件;
FindNextFile从FindFile以前调用开始继续下一查找。
2、 CString类
CString是一种很有用的数据类型,很大程度上简化了MFC中的许多操作,CString位于头文件afx.h中。
(1) CString对象的连接变得很方便,代码如下:
CString gray("Gray");
CString cat("Cat");
CString graycat = gray + cat; //then graycat="GrayCat"
要比下面的用法方便得多:
char gray[] = "Gray";
char cat[] = "Cat";
char * graycat = malloc(strlen(gray) + strlen(cat) + 1);
strcpy(graycat, gray);
strcat(graycat, cat);
(2) 格式化字符串
格式化字符串使用CString对象的Format()方法,不必担心用来存放格式化后数据的缓冲区是否足够大,这些工作由CString类来完成。格式化是一种把其它不是字符串类型的数据转换成CString类型的常用技巧,如把一个整数转换为CString类型,代码如下:
CString s;
s.Format(_T(“%d”),total);
(3) CString型和char*类型的相互转化
语句“CString graycat = “Gray”+”Cat”;”是错误的。这是因为“+”运算符被定义为一个重载操作符,而不是两个LPCTSTR数据类型,它是底层数据类型。我们不能对基本数据类型(如int、char、char*)重载C++的运算符,正确语句如下:
CString graycat = CString(“Gray”) + CString(“Cat”);
或者 CString graycat = CString(“Gary”) + “Cat”;
研究表明:“+”总是使用在至少有一个CString对象和一个LPCTSTR的场合。
如何将char*转化为CString型?
CString s = "This is a test"; // 8-bit only
CString s = _T("This is a test"); // Unicode-aware
CString s("This is a test"); // 8-bit only
CString s(_T("This is a test")); // Unicode-aware
char * p = "a test"; //TCHAR * p = _T("a test") 或者LPTSTR p = _T("a test");
CString s = p; //或者CString s(p);
CString转换为char*的三种方法:
a、 强制类型转换为LPCTSTR:CString s(“GrayCat”); LPCTSTR p = s;
b、 使用CString对象的GetBuffer方法:
我们可以使用GetBuffer修改CString中的内容,它的作用是返回一个可写的缓冲指针。下述代码可实现修改字符或截短字符串。
CString s(_T("File.ext"));
LPTSTR p = s.GetBuffer();
LPTSTR dot = strchr(p, .); //strchr(char* s,char c)的功能是查找字符串s中首次出现字符c的位置
if(p != NULL)
*p = _T(\0);
s.ReleaseBuffer();
这是 GetBuffer 的第一种用法,也是最简单的一种,不用给它传递参数,它使用默认值 0,意思是:"给我这个字符串的指针,我保证不加长它"。当你调用 ReleaseBuffer 时,字符串的实际长度会被重新计算,然后存入 CString 对象中。
必须强调一点,在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。
LPTSTR p = s.GetBuffer(1024); 调用此函数后,不仅获得了字符串缓冲区的指针,而且同时获得了长度至少为1024个字符的空间。