C++遍历路径下的所有文件
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++遍历路径下的所有文件的更多相关文章
- Python小代码_15_遍历指定路径下的所有文件和文件夹,并格式化输出文件路径文件名和文件夹名,文件大小,修改时间
遍历指定路径下的所有文件和文件夹,并格式化输出文件路径文件名和文件夹名,文件大小,修改时间 import osimport datetime def print_tree(dir_path): for ...
- java通过文件路径读取该路径下的所有文件并将其放入list中
java通过文件路径读取该路径下的所有文件并将其放入list中 java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...
- unity3d 依据指定的Assets下的目录路径 返回这个路径下的全部文件名称
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; < ...
- C/C++遍历目录下的所有文件(Windows/Linux篇,超详细)
本文可转载,转载请注明出处:http://www.cnblogs.com/collectionne/p/6815924.html. 前面的一篇文章我们讲了用Windows API遍历一个目录下的所有文 ...
- C/C++遍历目录下的所有文件(Windows篇,超详细)
注: 1. 本文讨论的是怎么用Windows API遍历目录下的所有文件.除Windows API,还有一种Windows/Linux通用的方式,使用<io.h>. 2. 本文部分翻译自M ...
- C++读取特定路径下文件目录及文件名称
这几天在弄一个项目,需要读取给定路径下的所有文件夹名称或所有带后缀的文件名. 查了下C++的资料,发现有很多方法,这里总结其中的一种,其他用法类似. 主要用到了以下几个头文件(类):io.h, fst ...
- python之实现循环查看指定路径下的所有文件---os.walk
循环查看指定路径下的所有文件.文件夹,包含隐藏文件注:“.filename” 以点开头的是隐藏文件 import os for cur_path,cur_dirs,cur_files in os.wa ...
- Java 递归获取一个路径下的所有文件,文件夹名称
package com.readfile; import java.io.File; public class GetAllFiles { public static void main(String ...
- Python3在指定路径下递归定位文件中出现的字符串
[本文出自天外归云的博客园] 脚本功能:在指定的路径下递归搜索,找出指定字符串在文件中出现的位置(行信息). 用到的python特性: 1. PEP 318 -- Decorators for Fun ...
随机推荐
- 152. Maximum Product Subarray(动态规划)
Given an integer array nums, find the contiguous subarray within an array (containing at least one n ...
- excel 八位二进制转换为十六进制公式
=BIN2HEX(C16&D16&E16&F16&G16&H16&I16&J16,2)
- flask 定义数据库关系(一对一)
一对一 我们将使用国家和首都来演示一对一关系:每个国家只有一个首都.反过来,一个城市也只能作为一个国家的首都.一对一关系如下: 在示例程序中,Country类表示国家,Capital类表示首都.建立一 ...
- VKD224B触摸芯片调试笔记
1.通过阅读datasheet了解芯片怎么使用,一般datasheet会提供参考电路.和相应的电气参数. 通过上面的表格可以知道芯片的供电,所需电流. 这个芯片可以通过引脚选择模式.通过上面的选项设置 ...
- C#对象序列化成XML,以及自定义标签名
C#对象序列化操作: public class XMLHelper { /// <summary> /// 对象序列化成 XML String /// </summary> p ...
- zabbix部署相关
一.centos7 安装zabbix 二.zabbix 乱码问题 三.zabbix自动发现自动注册 四.zabbix3.4实现sendEmail邮件报警
- 【Alpha】Scrum Meeting 6
目录 前言 任务分配 燃尽图 会议照片 签入记录 困难 前言 第6次会议在4月10日22:00由PM在一公寓三楼召开. 交流确认了任务进度,对下一阶段任务进行分配.时长15min. 任务分配 姓名 当 ...
- gitlab 迁移
http://www.cnblogs.com/crysmile/p/9505527.html
- HBase最佳实践-写性能优化策略
本篇文章来说道说道如何诊断HBase写数据的异常问题以及优化写性能.和读相比,HBase写数据流程倒是显得很简单:数据先顺序写入HLog,再写入对应的缓存Memstore,当Memstore中数据大小 ...
- Java IO流及应用(一)
IO流 IO流概述及FileWriter类的使用 FileReader类使用 缓冲流介绍和使用 IO流相关案例 NO.one IO流概述及FileWriter类使用 1.1 IO流概述及分类 IO流用 ...