Windows下文件列举,搜索
Windows下列举文件用的函数是 FindFirstFile 和 FindNextFile ,另外一个结构体是WIN32_FIND_DATA
以下是MSDN对于WIN32_FIND_DATA的定义
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName[MAX_PATH];
TCHAR cAlternateFileName[14];
} WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;
FindFirstFile 和 FindNextFile 传递的参数都如下
HANDLE WINAPI FindFirstFile(
_In_ LPCTSTR lpFileName,
_Out_ LPWIN32_FIND_DATA lpFindFileData
);
BOOL WINAPI FindNextFile(
_In_ HANDLE hFindFile,
_Out_ LPWIN32_FIND_DATA lpFindFileData
);
这里我们需要使用的是cFileName这个参数,另外我们还可以查询访问时间以及写入时间,分别是ftLastAccessTime, ftLastWriteTime
另外在Windows中,目录使用 // 或者 \\ 均可,而在Linux中只能使用 /
列举某个文件下的所有文件
#include <Windows.h>
#include <tchar.h>
#include <stdio.h>
#include <iostream> using namespace std; char filename[100][10]; int main() {
int index = 0;
int i;
WIN32_FIND_DATA findData;
HANDLE hFile = FindFirstFile(TEXT("Debug\\*"), &findData);
memset(filename, 0, sizeof(filename)); if(INVALID_HANDLE_VALUE == hFile) {
printf("find first file error\n");
exit(1);
} while(FindNextFile(hFile, &findData)) {
for(i = 0; findData.cFileName[i] != '\0'; i++) {
filename[index][i] = findData.cFileName[i];
}
filename[index++][i] = '\0';
}
for(i = 0; i < index; i++) printf("%s\n", filename[i]); return 0;
}
如果是目录的话,那就需要不断的递归了
void FindFiles(CString &strPath) {
WIN32_FIND_DATA findData;
CString strTemp = strPath;
strTemp.Format(_T("%s\\*.*"), strPath);//查找指定目录下的直接的所有文件和目录
HANDLE hFile = FindFirstFile(strTemp, &findData);
while (hFile != INVALID_HANDLE_VALUE) {
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { //如果是目录
if(findData.cFileName[0] != _T('.')) { //排除.和..文件夹
strTemp = strPath+ CString("\\") + findData.cFileName; //获得完整路径
FindFiles(strTemp); //递归查找当前目录的文件
}
}
else {
strTemp = strPath+ CString("\\") + findData.cFileName;
}
if(!FindNextFile(hFile, &findData)) {
break;
}
}
}
Windows下文件列举,搜索的更多相关文章
- 使用cwRsync实现windows下文件定时同步【转】
1.参考文献: 使用cwRsync实现windows下文件定时同步(备份) 文件同步工具CwRsync的使用方法及常用命令详解 2.背景: 当前的SCADA架构中,有1台Server,5台FE,还有1 ...
- 解决Windows下文件在Linux下打开出现乱码的问题
目录 问题 原理 解决 总结 参考资料 问题 前几天生病了,Java一直在看代码但是没跟着打,于是决定偷一波小小的懒,直接把教材的代码从Windows通过共享文件夹放到了Linux里面.但是编译的时候 ...
- 使用cwRsync实现windows下文件定时同步
1.参考文献: 使用cwRsync实现windows下文件定时同步(备份) 文件同步工具CwRsync的使用方法及常用命令详解 2.背景: 当前的SCADA架构中,有1台Server,5台FE,还有1 ...
- windows 下文件的高级操作
本文主要说明在Windows下操作文件的高级方法,比如直接读写磁盘,文件的异步操作,而文件普通的读写方式在网上可以找到一大堆资料,在这也就不再进行专门的说明. 判断文件是否存在 在Windows中并没 ...
- Windows下文件的所有和权限
跟linux不同, 在linux下 ,文件的所有者,就拥有对文件的所有读写执行的权限, 而windows, 文件的所有者不一定对文件拥有所有的权限, 场景: 要对系统文件(windows\system ...
- Windows下文件加固
今天学到一种Windows下简单的文件加固方法,可以防止文件被(普通)删除. CMD找到要加固的文件. 例:C盘下有个 1516.txt 文本文件需要加固. 然后 copy 该文件.(注意:这里并非普 ...
- Go之获取Windows下文件是否隐藏
起初,做了个小程序,用来检测磁盘中所有的文件 package main import( "fmt" "io/ioutil" "os" ) v ...
- 【原创】webbluetoorh 在windows下无法显示搜索列表,在mac下正常的解决办法
google webbluetooth在windows下不能弹出设备搜索列表提示“Web Bluetooth API is not available”,因为webbluetooth是google新推 ...
- Linux学习笔记之如何把ubuntu下的c文件共享到windows下文件夹
1.首先可在桌面新建文件夹,或者自己任意路径文件夹都可以, 2.在Linux下点击虚拟机 点击设置 点击选项,选择共享文件夹,点击总是启用,然后添加文件夹,添加你windows下想保存的文件夹 可 ...
随机推荐
- QT中关于窗口全屏显示与退出全屏的实现
近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一些关于这方面的答案,希望能给大家一些帮助. 首先,在QT中对于窗口显示常用的有这么几个方法可以调用: Qt全屏显示 ...
- 大数据笔记11:MapReduce的运行流程
1.基本概念 (1)Job & Task (2)JobTracker (3)TaskTracker
- nginx安装(正式)
一.安装说明 系统环境:CentOS Linux release 7.2.1511 (Core) 系统内核:3.10.0-327.el7.x86_64软件:nginx-1.10.1.tar.gz其他所 ...
- 【转】tkinter实现的文本编辑器
此代码是看完如下教学视频实现的,所以算是[转载]吧: 效果: 代码: # -*- encodin ...
- Swift中可能失败的构造器的传播(调用)和重写
import Foundation /* 可能失败构造器的传播(调用) 1.可能失败的构造器可以调用同一个类中的普通构造器 2.普通构造器不能调用同一个类中的可能失败构造器 3.结构体中, 普通构造器 ...
- [转]在Linux里设置环境变量的方法
在Linux里设置环境变量的方法(export PATH) 一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量.例如我的mips-linux-gcc编译器在“/opt/a ...
- 关于qq创始人----马化腾的一些琐事
马化腾(pony)写代码的水平如何? 一位产品经理吐槽: 曾经和pony一起写过代码. 当时5个人挤在一个只有四个位置的房间里,埋头开发,用C++.我当时负责写一个通讯模块,有一个bug弄了两天,没有 ...
- 转载:如何查看用户当前shell和修改用户登陆时的默认shell
转载网址:http://www.51testing.com/html/44/211244-197042.html 1.查看当前使用的shell类型 # echo $SHELL/usr/bin/bs ...
- 标准程序员系列-Github篇-初始化一个代码仓库
下面将一步步介绍怎样使用GitHub来初始化一个项目的版本控制仓库: 1. 到GitHub上注册自己的账号:https://github.com/ 2. 创建第一个代码仓库一个仓库相当于一个项目的代码 ...
- 容器 SET part2
(6) insert STL中为什么提供这样的set的insert呢? 这个成员函数存在的目的是为了插入效率的问题.函数参数中的 __position 只是一个提示值,表示在这个位置附近(可前可后 ...