intptr_t类型用于记录文件夹句柄,注意该类型不是指针类型,而是int型的重定义。

_finddata_t结构体类型用于记录文件信息。

_finddata_t结构体定义如下

struct _finddata_t {

unsigned attrib;        // 存储文件属性
__time64_t time_create;     // 存储文件创建时间
__time64_t time_access;     // 存储文件最后一次被访问的时间
__time64_t time_write;      // 存储文件最后一次被修改的时间
_fsize_t size;          // 存储文件的大小
char name[260];        // 存储文件名称

};

_findfirst()函数

_findfirst()函数原型如下:

intptr_t _findfirst(

  const char *filespec,      // 目标文件

  struct _finddata_t *fileinfo    // 用于存储文件信息的_finddata_t结构体

);

  1. 函数如果成功,返回一个唯一的搜索句柄标识一个或一组和filespec说明匹配的文件,可以用于接下来的_findnext()和_findclose()函数。
    否则_findfirst()返回-1
  2. _findnext()函数
    _findnext()函数原型如下:
  3. int _findnext(
  1. intptr_t handle,            // 搜索句柄,通过_findfirst()函数获得
  2. struct _finddata_t *fileinfo     // 用于存储文件信息的_finddata_t结构体
  3. );
    函数如果成功,返回0,否则返回-1。如果没有更多能够找到的文件了,也会导致失败。
  1. _findclose()函数
    原型如下:
  1. int _findclose(
  2. intptr_t handle    // 搜索句柄
  3. );
    该函数用于关闭搜索句柄
  4.  
  5. 代码如下:
  1. void CDlg::OnBnClickedOk()
  2. {
  3. // TODO: 在此添加控件通知处理程序代码
  4. UpdateData(TRUE);
  5. m_ListFile.ResetContent();
  6.  
  7. // 宽字节转多字节
  8. char *pPathBuf = NULL;
  9. int PathBufSize = WideCharToMultiByte(0, 0, m_szPath.GetBuffer(), m_szPath.GetLength(), pPathBuf, 0, NULL, NULL);
  10. if (PathBufSize <= 0)
  11. m_ListFile.AddString(_T("获取多字节缓冲区大小错误"));
  12. pPathBuf = new char[PathBufSize + 1];
  13. memset(pPathBuf, 0, PathBufSize + 1);
  14. WideCharToMultiByte(0, 0, m_szPath.GetBuffer(), m_szPath.GetLength(), pPathBuf, PathBufSize + 1, 0, 0);
  15. if (strlen(pPathBuf) <= 0)
  16. m_ListFile.AddString(_T("宽字节转多字节错误"));
  17.  
  18. queue<string> *pVect = new queue<string>;
  19. if (GetPathFile(pPathBuf, pVect) == false)
  20. m_ListFile.AddString(_T("遍历目录下的所有文件失败!"));
  21. else{
  22. while (!pVect->empty())
  23. {
  24. string szFileName = pVect->front();
  25. LPWSTR pBuf = NULL;
  26. int nLen = MultiByteToWideChar(0, 0, (char*)szFileName.c_str(), szFileName.length(), pBuf, 0);
  27. if (nLen > 0)
  28. {
  29. pBuf = new TCHAR[nLen + 1];
  30. memset(pBuf, 0, sizeof(TCHAR)* (nLen + 1));
  31. MultiByteToWideChar(0, 0, (char*)szFileName.c_str(), szFileName.length(), pBuf, nLen);
  32. m_ListFile.AddString(pBuf);
  33. delete[] pBuf;
  34. pBuf = NULL;
  35. }
  36. pVect->pop();
  37. }
  38. }
  39.  
  40. delete[] pPathBuf;
  41. pPathBuf = NULL;
  42. UpdateData(FALSE);
  43. }
  44.  
  45. bool CDlg::GetPathFile(const char* pPath, queue<string> *pVect)
  46. {
  47. if (!pPath || !pPath)
  48. return false;
  49. char* szPath = new char[128];
  50. memset(szPath, 0, 128);
  51. _snprintf_s(szPath, 128, 128, "%s\\*.*", pPath);
  52. intptr_t Handle;
  53. _finddata_t FindData;
  54. Handle = _findfirst(szPath, &FindData);
  55. if (Handle == -1)
  56. return false;
  57. do
  58. {
  59. if (strcmp(FindData.name, ".") != 0 && strcmp(FindData.name, "..") != 0)
  60. {
  61. pVect->push(FindData.name);
  62. if (strrchr(FindData.name, '.') == NULL)
  63. {
  64. string sz = pPath;
  65. sz += "\\";
  66. sz += FindData.name;
  67. GetPathFile(sz.c_str(), pVect);
  68. }
  69. }
  70. } while (_findnext(Handle, &FindData) == 0);
  71. _findclose(Handle);
  72. delete[] szPath;
  73. szPath = NULL;
  74. return true;
  75. }

  

  1.  

C++遍历路径下的所有文件的更多相关文章

  1. Python小代码_15_遍历指定路径下的所有文件和文件夹,并格式化输出文件路径文件名和文件夹名,文件大小,修改时间

    遍历指定路径下的所有文件和文件夹,并格式化输出文件路径文件名和文件夹名,文件大小,修改时间 import osimport datetime def print_tree(dir_path): for ...

  2. java通过文件路径读取该路径下的所有文件并将其放入list中

    java通过文件路径读取该路径下的所有文件并将其放入list中   java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...

  3. unity3d 依据指定的Assets下的目录路径 返回这个路径下的全部文件名称

    using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; < ...

  4. C/C++遍历目录下的所有文件(Windows/Linux篇,超详细)

    本文可转载,转载请注明出处:http://www.cnblogs.com/collectionne/p/6815924.html. 前面的一篇文章我们讲了用Windows API遍历一个目录下的所有文 ...

  5. C/C++遍历目录下的所有文件(Windows篇,超详细)

    注: 1. 本文讨论的是怎么用Windows API遍历目录下的所有文件.除Windows API,还有一种Windows/Linux通用的方式,使用<io.h>. 2. 本文部分翻译自M ...

  6. C++读取特定路径下文件目录及文件名称

    这几天在弄一个项目,需要读取给定路径下的所有文件夹名称或所有带后缀的文件名. 查了下C++的资料,发现有很多方法,这里总结其中的一种,其他用法类似. 主要用到了以下几个头文件(类):io.h, fst ...

  7. python之实现循环查看指定路径下的所有文件---os.walk

    循环查看指定路径下的所有文件.文件夹,包含隐藏文件注:“.filename” 以点开头的是隐藏文件 import os for cur_path,cur_dirs,cur_files in os.wa ...

  8. Java 递归获取一个路径下的所有文件,文件夹名称

    package com.readfile; import java.io.File; public class GetAllFiles { public static void main(String ...

  9. Python3在指定路径下递归定位文件中出现的字符串

    [本文出自天外归云的博客园] 脚本功能:在指定的路径下递归搜索,找出指定字符串在文件中出现的位置(行信息). 用到的python特性: 1. PEP 318 -- Decorators for Fun ...

随机推荐

  1. 152. Maximum Product Subarray(动态规划)

    Given an integer array nums, find the contiguous subarray within an array (containing at least one n ...

  2. excel 八位二进制转换为十六进制公式

    =BIN2HEX(C16&D16&E16&F16&G16&H16&I16&J16,2)

  3. flask 定义数据库关系(一对一)

    一对一 我们将使用国家和首都来演示一对一关系:每个国家只有一个首都.反过来,一个城市也只能作为一个国家的首都.一对一关系如下: 在示例程序中,Country类表示国家,Capital类表示首都.建立一 ...

  4. VKD224B触摸芯片调试笔记

    1.通过阅读datasheet了解芯片怎么使用,一般datasheet会提供参考电路.和相应的电气参数. 通过上面的表格可以知道芯片的供电,所需电流. 这个芯片可以通过引脚选择模式.通过上面的选项设置 ...

  5. C#对象序列化成XML,以及自定义标签名

    C#对象序列化操作: public class XMLHelper { /// <summary> /// 对象序列化成 XML String /// </summary> p ...

  6. zabbix部署相关

    一.centos7 安装zabbix 二.zabbix 乱码问题 三.zabbix自动发现自动注册 四.zabbix3.4实现sendEmail邮件报警

  7. 【Alpha】Scrum Meeting 6

    目录 前言 任务分配 燃尽图 会议照片 签入记录 困难 前言 第6次会议在4月10日22:00由PM在一公寓三楼召开. 交流确认了任务进度,对下一阶段任务进行分配.时长15min. 任务分配 姓名 当 ...

  8. gitlab 迁移

    http://www.cnblogs.com/crysmile/p/9505527.html

  9. HBase最佳实践-写性能优化策略

    本篇文章来说道说道如何诊断HBase写数据的异常问题以及优化写性能.和读相比,HBase写数据流程倒是显得很简单:数据先顺序写入HLog,再写入对应的缓存Memstore,当Memstore中数据大小 ...

  10. Java IO流及应用(一)

    IO流 IO流概述及FileWriter类的使用 FileReader类使用 缓冲流介绍和使用 IO流相关案例 NO.one IO流概述及FileWriter类使用 1.1 IO流概述及分类 IO流用 ...