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下文件列举,搜索的更多相关文章

  1. 使用cwRsync实现windows下文件定时同步【转】

    1.参考文献: 使用cwRsync实现windows下文件定时同步(备份) 文件同步工具CwRsync的使用方法及常用命令详解 2.背景: 当前的SCADA架构中,有1台Server,5台FE,还有1 ...

  2. 解决Windows下文件在Linux下打开出现乱码的问题

    目录 问题 原理 解决 总结 参考资料 问题 前几天生病了,Java一直在看代码但是没跟着打,于是决定偷一波小小的懒,直接把教材的代码从Windows通过共享文件夹放到了Linux里面.但是编译的时候 ...

  3. 使用cwRsync实现windows下文件定时同步

    1.参考文献: 使用cwRsync实现windows下文件定时同步(备份) 文件同步工具CwRsync的使用方法及常用命令详解 2.背景: 当前的SCADA架构中,有1台Server,5台FE,还有1 ...

  4. windows 下文件的高级操作

    本文主要说明在Windows下操作文件的高级方法,比如直接读写磁盘,文件的异步操作,而文件普通的读写方式在网上可以找到一大堆资料,在这也就不再进行专门的说明. 判断文件是否存在 在Windows中并没 ...

  5. Windows下文件的所有和权限

    跟linux不同, 在linux下 ,文件的所有者,就拥有对文件的所有读写执行的权限, 而windows, 文件的所有者不一定对文件拥有所有的权限, 场景: 要对系统文件(windows\system ...

  6. Windows下文件加固

    今天学到一种Windows下简单的文件加固方法,可以防止文件被(普通)删除. CMD找到要加固的文件. 例:C盘下有个 1516.txt 文本文件需要加固. 然后 copy 该文件.(注意:这里并非普 ...

  7. Go之获取Windows下文件是否隐藏

    起初,做了个小程序,用来检测磁盘中所有的文件 package main import( "fmt" "io/ioutil" "os" ) v ...

  8. 【原创】webbluetoorh 在windows下无法显示搜索列表,在mac下正常的解决办法

    google webbluetooth在windows下不能弹出设备搜索列表提示“Web Bluetooth API is not available”,因为webbluetooth是google新推 ...

  9. Linux学习笔记之如何把ubuntu下的c文件共享到windows下文件夹

    1.首先可在桌面新建文件夹,或者自己任意路径文件夹都可以, 2.在Linux下点击虚拟机 点击设置 点击选项,选择共享文件夹,点击总是启用,然后添加文件夹,添加你windows下想保存的文件夹   可 ...

随机推荐

  1. Linux常见面试题

      一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 索引节点来标 ...

  2. [Javascript] Intro to Recursion - Detecting an Infinite Loop

    When using recursion, you must be mindful of the dreaded infinite loop. Using the recursive function ...

  3. sqlserver中的锁与事务

    以下内容整理自: SQL Server中的锁 SQLSERVER中的元数据锁 SQLSERVER中的锁资源类型 浅谈sqlserver中的事务和锁 锁的分类 1.从数据库角度 独占锁(排它锁 X) 独 ...

  4. C#--virtual,abstract,override,new,sealed

    virtual:使用此关键字,可以使其在派生类中被重写. abstract:抽象方法,由子类重写,或继续为抽象方法存在,并由其子子类实现. override: 重写父类方法,属性,或事件的抽象实现或虚 ...

  5. n行m列的网格中含有的矩形数

    给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形 公式:[ n(n+1)*m(m+1)]/4 直接想问题比较复杂,可以先考虑矩形的长,再考虑矩形的高,由对称性可知最后的结果中m和n对称 ...

  6. ie6下:png图片不透明 和 背景图片为png的节点的内部标签单击事件不响应

    1.png图片不透明 少量图片时:使用滤镜: _background:none; _filter:prodig:DXImageTransform.Microsoft.AlphaImageLoader( ...

  7. cs代码实现控件移动TranslateTransform

    xaml: <Rectangle> <Rectangle.RenderTransform> <TranslateTransform x:Name="myTran ...

  8. Android数据存储

    SharedPreferences----------->for primitive data Internal Storage-------------->for private dat ...

  9. Javascript 原型注意事项

    function abc() {} abc.prototype.xx = { name: "keatkeat" } var x = new abc(); x.xx.name = & ...

  10. FJ省队集训DAY3 T2

    思路:如果一个DAG要的路径上只要一条边去切掉,那么要怎么求?很容易就想到最小割,但是如果直接做最小割会走出重复的部分,那我们就这样:反向边设为inf,这样最小割的时候就不会割到了,判断无解我们直接用 ...