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结构体

);

函数如果成功,返回一个唯一的搜索句柄标识一个或一组和filespec说明匹配的文件,可以用于接下来的_findnext()和_findclose()函数。
否则_findfirst()返回-1。 _findnext()函数
_findnext()函数原型如下: int _findnext(
    intptr_t handle,            // 搜索句柄,通过_findfirst()函数获得
struct _finddata_t *fileinfo     // 用于存储文件信息的_finddata_t结构体
);
函数如果成功,返回0,否则返回-1。如果没有更多能够找到的文件了,也会导致失败。
_findclose()函数
原型如下:
int _findclose(
intptr_t handle    // 搜索句柄
);
该函数用于关闭搜索句柄 代码如下:
void CDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_ListFile.ResetContent(); // 宽字节转多字节
char *pPathBuf = NULL;
int PathBufSize = WideCharToMultiByte(0, 0, m_szPath.GetBuffer(), m_szPath.GetLength(), pPathBuf, 0, NULL, NULL);
if (PathBufSize <= 0)
m_ListFile.AddString(_T("获取多字节缓冲区大小错误"));
pPathBuf = new char[PathBufSize + 1];
memset(pPathBuf, 0, PathBufSize + 1);
WideCharToMultiByte(0, 0, m_szPath.GetBuffer(), m_szPath.GetLength(), pPathBuf, PathBufSize + 1, 0, 0);
if (strlen(pPathBuf) <= 0)
m_ListFile.AddString(_T("宽字节转多字节错误")); queue<string> *pVect = new queue<string>;
if (GetPathFile(pPathBuf, pVect) == false)
m_ListFile.AddString(_T("遍历目录下的所有文件失败!"));
else{
while (!pVect->empty())
{
string szFileName = pVect->front();
LPWSTR pBuf = NULL;
int nLen = MultiByteToWideChar(0, 0, (char*)szFileName.c_str(), szFileName.length(), pBuf, 0);
if (nLen > 0)
{
pBuf = new TCHAR[nLen + 1];
memset(pBuf, 0, sizeof(TCHAR)* (nLen + 1));
MultiByteToWideChar(0, 0, (char*)szFileName.c_str(), szFileName.length(), pBuf, nLen);
m_ListFile.AddString(pBuf);
delete[] pBuf;
pBuf = NULL;
}
pVect->pop();
}
} delete[] pPathBuf;
pPathBuf = NULL;
UpdateData(FALSE);
} bool CDlg::GetPathFile(const char* pPath, queue<string> *pVect)
{
if (!pPath || !pPath)
return false;
char* szPath = new char[128];
memset(szPath, 0, 128);
_snprintf_s(szPath, 128, 128, "%s\\*.*", pPath);
intptr_t Handle;
_finddata_t FindData;
Handle = _findfirst(szPath, &FindData);
if (Handle == -1)
return false;
do
{
if (strcmp(FindData.name, ".") != 0 && strcmp(FindData.name, "..") != 0)
{
pVect->push(FindData.name);
if (strrchr(FindData.name, '.') == NULL)
{
string sz = pPath;
sz += "\\";
sz += FindData.name;
GetPathFile(sz.c_str(), pVect);
}
}
} while (_findnext(Handle, &FindData) == 0);
_findclose(Handle);
delete[] szPath;
szPath = NULL;
return true;
}

  

												

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. js高级---本地对象、内置对象、宿主对象

    名词参考: 原生对象:也叫内部对象.本地对象.native object 内置对象:Build-in object 宿主对象:host object ECMA-262 定义: 原生对象:独立于宿主环境 ...

  2. QT中显示gif图片方法

    movie = new QMovie(":/timg.gif"); movie->setScaledSize(QSize(,)); ui->giflabel->s ...

  3. FAT32文件系统学习(上)

    2011-06-02 22:30:48 目的:需要编写SD读图片的底层驱动程序.所以要了解一个SD卡常用文件系统基本概念.累计学习用时2.5小时. 一,FAT32的保留区 1,引导扇区 :引导扇区是F ...

  4. python 竖排文本

    新建目录train,并将目录data和data1复制到train下 python test data/,data1/ 目录data和data1中包含很多文件,文件中内容都是以空格分隔,将所有文件内容都 ...

  5. nodejs笔记之初识node

    1.安装node; node -v  //检测node是否安装成功 node可以做什么: 搭建服务器: 读写文件: 连接数据库: 爬虫: node的模块系统: 原生模块(如http,fs); 自定义模 ...

  6. Navigation包中的move_base和amcl实现自动驾驶

    安装功能包: 1.安装导航定位包navigation $ sudo apt-get install ros-indigo-navigation 2.由于导航包在/cmd_val下发布的移动数据加速度会 ...

  7. nginx ssl 卸载功能 第八章

    一 .证书自签发和给web 服务签发证书 .ssl 证书加密文件 ****************************** 建立私有CA openCA openssl 证书申请及签署步骤 .生成证 ...

  8. Weighted Quick Union with Path Compression (WQUPC)

    在WQU基础上,添加一步路径压缩. 前面的优化都是在union,路径压缩是在find上面做文章. 这里的路径压缩我还没完全搞明白,之后不断再来的,不管是理解还是博文编排素材之类的. 说是加一步压缩是确 ...

  9. [pytorch修改]npyio.py 实现在标签中使用两种delimiter分割文件的行

    from __future__ import division, absolute_import, print_function import io import sys import os impo ...

  10. struts2注释返回json数据