MFC类CFileFind执行本地文件查找
假设,现在在指定路径下有如下图1文件:

图 1 指定路径下包含的文件
(1)IsDirectory(),表明当前查找到的文件是类型为目录的文件;
1 CString pathStr=getenv("UGII_USER_DIR");
2 pathStr=pathStr+"\\userDefine\\*.*"; // 查找文件的路径
3
4
5 CFileFind finder;
6 BOOL fileFind=finder.FindFile(str);
7 int rowIndex=0;
8
9 while(fileFind)
10 {
11 if(finder.IsDirectory())
12 {
13 CString fileName=seek.GetFileName();
14 m_ObjectList.InsertItem(rowIndex,fileName); //将查找到的文件列表显示
15 rowIndex++;
16 }
17
18 }
遍历结果如图2所示:

图 2 IsDirectory遍历结果
(2)IsDots表明当前查找到的是 “." 或者 "..",而这两个东西虽然是目录,但是一个表明这个目录本身,一个代表上层目录(但是根目录下面..也是本身)。
1 if (seek.IsDots())
2 {
3 CString fileName=seek.GetFileName();
4 m_ObjectList.InsertItem(rowIndex,fileName);
5 rowIndex++;
6 }
遍历结果如图3所示:

图 3 IsDots遍历结果
对比:
IsDirectory判断是否为目录,IsDots判断是否为点
每个目录下都有缺省的两个目录,名称分别为'.'和'..',分别代表上一层目录和本层目录。因此,当我们在遍历目录下文件时,需要过滤掉这两个缺省目录。
(3)如果我们要遍历的是路径下的非目录文件则可以,如下使用:
if (!seek.IsDirectory())
{
CString fileName=seek.GetFileName();
m_ObjectList.InsertItem(rowIndex,fileName);
rowIndex++;
}
遍历结果如图4所示:

图 4 非目录遍历结果
—————————————————————————————————
extern 与 extern ”C" 的困惑
在做UG二次开发的时候,如下两种用法
(1)这样当然是没问题的
1 //入口主函数 2 extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen ) 3 { 4 int errorCode = UF_initialize(); 5 if ( 0 == errorCode ) 6 { 7 UF_MB_add_actions(action_table); 8 errorCode = UF_terminate(); 9 } 10 }
(2)之前这样用,成功,但是今天这样测试,怎么也无法注册上菜单(编译都没问题)
1 //入口主函数 2 extern DllExport void ufsta( char *param, int *returnCode, int rlen ) 3 { 4 int errorCode = UF_initialize(); 5 if ( 0 == errorCode ) 6 { 7 UF_MB_add_actions(action_table); 8 errorCode = UF_terminate(); 9 } 10 }
在这里:http://blog.chinaunix.net/uid-21411227-id-1826909.html,看了extern ”C" 的详细用法,但是还是没弄明白为什么,第二种,之前可以成功注册到UG菜单,今儿却不行了,C与C++还是太复杂,希望我慢慢就懂了…