添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

一、先介绍一个结构 WIN32_FIND_DATA

typedef struct _WIN32_FIND_DATA

{

DWORD dwFileAttributes; // 文件属性

FILETIME ftCreationTime; // 文件创建时间

FILETIME ftLastAccessTime; // 文件最后一次访问时间

FILETIME ftLastWriteTime; // 文件最后一次修改时间

DWORD nFileSizeHigh; // 文件长度高 32

DWORD nFileSizeLow; // 文件长度低 32

DWORD dwReserved0; // 系统保留

DWORD dwReserved1; // 系统保留

TCHAR cFileName[ MAX_PATH ]; // 长文件名

TCHAR cAlternateFileName[ 14 ]; // 文件的可选名

} WIN32_FIND_DATA;

可以通过 FindFirstFile ()函数,根据文件路径把待操作文件的相关属性读取到 WIN32_FIND_DATA 结构中去:

WIN32_FIND_DATA ffd;

HANDLE hFind = FindFirstFile("c://test.dat",&ffd);

二、函数 FindFirstFile

1 、声明 :HANDLE FindFirstFile(LPCTSTR lpFileName,LPWIN32_FIND_DATA lpFindFileData);

2 、参数 :

lpFileName String ,欲搜索的文件名。可包含通配符,并可包含一个路径或相对路径名

lpFindFileData WIN32_FIND_DATA ,一个 WIN32_FIND_DATA 指针,用于装载与找到的文件有关的信息,该结构可用于后续的搜索

3 、返回值 :

如执行成功,返回一个搜索句柄。如果出错,返回一个 INVALID_HANDLE_VALUE 常数,一旦不再需要,应该用 FindClose 函数关闭这个句柄

4 、功能

读取文件信息到一个 WIN32_FIND_DATA 结构中,返回这个文件的句柄

5 、注释:

由这个函数返回的句柄可以作为一个参数用于 FindNextFile 函数。这样一来,就可以方便的枚举出与 lpFileName 参数指定的文件名相符的所有文件(是指文件名含有通配符)

三、函数 FindNextFile

1 、声明 BOOL FindNextFile(HANDLE hFindFile, LPWIN32_FIND_DATA lpFindFileData);

2 、参数 :

HANDLE hFindFile 搜索的文件句柄,函数执行的时候搜索的是此句柄的下一文件

LPWIN32_FIND_DATA lpFindFileData 一个 WIN32_FIND_DATA 指针,

3 、返回值 :

如果调用成功返回一个非 0 值;调用失败,返回为 0 ,可调用 GetLastError 来获取错误信息

4 、功能

继续查找 FindFirstFile 函数搜索后的文件

5 、注释:

这个函数可以连续调用,以方便的枚举出与 lpFileName 参数指定的文件名相符的所有文件

四、下面是遍历代码

#include<windows.h>
#include<iostream>
#include<string>
using namespace std;

//只能处理目录:lpPath只能是路径

find(char * lpPath)
{
char szFind[MAX_PATH];
WIN32_FIND_DATA FindFileData;
strcpy(szFind,lpPath);
strcat(szFind,"*.*");
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind) return;
while(TRUE)
{
if(FindFileData.dwFileAttributes

&FILE_ATTRIBUTE_DIRECTORY)
{
if(FindFileData.cFileName[0]!='.')
{
strcpy(szFile,lpPath);
strcat(szFile,"");
strcat(szFile,FindFileData.cFileName);
find(szFile);
}
}
else
{
cout << FindFileData.cFileName;
}
if(!FindNextFile(hFind,&FindFileData)) break;
}
FindClose(hFind);
}