设为首页 加入收藏

TOP

3.3.7 具体实现(6)
2013-10-07 15:55:07 来源: 作者: 【 】 浏览:74
Tags:3.3.7 具体 实现

3.3.7  具体实现(6)

函数FindFirstFile()可以在指定盘符下查找文件,并将获取到的文件数据保存到缓冲区中,该函数返回文件查找操作的句柄。参数lpFileName表示用户需要查找的文件名。如果该名称中没有包含路径,则程序会在当前目录下来查找文件,否则在指定路径下查找文件。在文件名中可以使用"*"等通配符代替,代码如下:

  1. lpFileName = "C:\\windows\\*.*";      //在C:\\windows\\下查找所有文件    
  2. lpFileName = "C:\\windows\\*.txt";    //在目录C:\\windows\\下查找所有TXT文件    
  3. lpFileName = "C:\\windows\\vtk.bin";  //在目录C:\\windows\\下查找文件vtk.bin    
  4. lpFileName = "C:\\windows\\*.exe";    //在目录C:\\windows\\下查找所有EXE文件   

函数FindNextFile()可以继续查找其他格式的文件的操作。参数hFindFile表示函数FindFirstFile()返回的操作句柄。参数lpFindFileData指向结构体WIN32_FIND_DATA,保存了程序所找到的文件名和文件属性等数据。该函数调用成功返回True,否则返回False。WIN32_FIND_DATA的结构如下:
  1. typedef struct _WIN32_FIND_DATA {    
  2. DWORD dwFileAttributes;             //文件属性    
  3. FILETIME ftCreationTime;            //文件创建日期    
  4. FILETIME ftLastAccessTime;          //文件最后保存日期    
  5. FILETIME ftLastWriteTime;           //文件最后修改日期    
  6. DWORD    nFileSizeHigh;              //文件长度的高32位    
  7. DWORD    nFileSizeLow;              //文件长度的低32位    
  8. DWORD    dwReserved0;               //保留    
  9. DWORD    dwReserved1;               //保留    
  10. TCHAR cFileName[MAX-PATH];          //本次查找到的文件名    
  11. TCHAR cAlternateFileName[14];       //文件的短文件名    
  12. } WIN32_FIND_DATA;   

参数cAlternateFileName[14]为文件的短文件名。例如文件路径为C:\\windows\\vtk.bin的文件短名称为vtk.bin。

当在客户端启动时,可以使用上面两个函数进行文件的查找。其代码如下:

  1. BOOL CFTPDlg::OnInitDialog()    
  2. {    
  3. ...                 //省略部分代码    
  4. int i = 0;    
  5. LVITEM item = {0};    //初始化列表结构    
  6. item.mask = LVIF_TEXT; //指定pszText域有效    
  7. WIN32_FIND_DATA filedata = {0};               //初始化结构体WIN32_FIND_DATA    
  8. HANDLE filehand;    //文件句柄    
  9. filehand = ::FindFirstFile("C:\\*", &filedata);    //查找C盘下所有文件    
  10. while(::FindNextFile(filehand, &filedata))    
  11. {    
  12. item.pszText = (LPTSTR)filedata.cFileName;  //将文件名称赋给列表项    
  13. this->GetDlgItem(IDC_LIST1)-> 
  14. InsertColumn(i, &item); //在列表中插入栏目名称    
  15. i += 1;    
  16. }    
  17. return TRUE;    
  18. }   

除了上述获取文件的方式以外,还可以通过用户选择的特定盘符进行获取。其中,响应用户选择的函数是CFTPDlg::OnSelchangeCombo1(),具体代码如下:
  1. void CFTPDlg::OnSelchangeCombo1()                   //组合框选择消息响应    
  2. {  
  3. CString str;                                        //定义字符串变量    
  4. int i = m_c1.GetCurSel();                       //获取用户单击位置的索引    
  5. m_c1.GetLBText(i, str);                         //获取索引处的字符  
  6. str += " * ";                                   //添加通配符"*"    
  7. WIN32_FIND_DATA filedata = {0};     //初始化结构体WIN32_FIND_DATA    
  8. HANDLE filehand;                                    //文件句柄    
  9. filehand = ::FindFirstFile(str, &filedata);     //查找特定盘下所有文件    
  10. while(::FindNextFile(filehand, &filedata))    
  11. {    
  12. item.pszText = (LPTSTR)filedata.cFileName;  //将文件名称赋给列表项    
  13. this->GetDlgItem(IDC_LIST1)-> 
  14. insertColumn(i, &item);     //在列表中插入栏目名称    
  15. i += 1;    
  16. }   
  17. }   

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.3.7 具体实现(5) 下一篇3.3.7 具体实现(7)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++中智能指针的性能 (2025-12-25 03:49:29)
·如何用智能指针实现c (2025-12-25 03:49:27)
·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)