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 ...
随机推荐
- [ Python ] OpenGL
pyOpenGL Installation Package Version------------------- -------numpy 1.14.2 PyOpenGL 3.1.0 PyOpenGL ...
- 第一篇——Struts2的工作原理及HelloWorld简单实现
Struts2工作原理: 一个请求在Struts框架中的处理步骤: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求: 2.这个请求经过一系列的过滤器(Filter): 3.接着F ...
- 【2017-05-18】WebForm的Repeater控件及简单控件
<%@ %> - 这里面写一些声明和引用的 <% %> - 编写C#代码的 <%= %> - 往界面上输出一个变量的值 <%# Eval("属性名 ...
- Linux中安装Python2.7
原文地址:http://www.jianshu.com/p/6425d18d3e47 安装依赖的库 yum -y install python-devel openssl openssl-deve ...
- oracle常用函数介绍
Oracle函数 Oracle SQL提供了用于执行特定操作的专用函数,这些函数大大增强了SQL语言的功能.函数可以接受零个或者多个输入参数,并返回一个输出结果.Oracle数据库中主要使用两种类型的 ...
- docker启动后忘记挂载nvidia-docker-volume的解决方法
进入 docker 目录 删除 volumes 下的所有文件 重新启动docker 运行nvidia-docker run XXX 来生成volume 修改所有 docker目录下containers ...
- JavaScript 字典
JavaScript 字典 字典以 key value 形式出现 使用: a = {'k1':'v1,''k2':'v2'} 获取值: a['k1'] 获取值:v1
- Docker Macvlan 应用部署
Docker Macvlan 应用部署 MacVLAN有两种桥接模式 Bridge模式:不创建子接口的情况下直接去桥接物理接口.直接桥接到与宿主级的同网段. VLAN Bridge模式:创建子接口去桥 ...
- webpack 几个基本打包扩展项的安装命令
网速比较慢的童鞋,装包时请准备好花生瓜子 webpack 本身只能打包 JavaScript 模块,但是它可以通过拓展打包比如静态资源文件.less.sass.typescript 等,还可以通过 b ...
- Lintcode175-Revert Binary Tree-Easy
175. Invert Binary Tree Invert a binary tree. Example Example 1: Input: {1,3,#} Output: {1,#,3} Expl ...