`
lgh1992314
  • 浏览: 325529 次
文章分类
社区版块
存档分类
最新评论

遍历目录 常用FindFirstFile()和FindNextFile()

 
阅读更多

FindFirstFile

函数功能描述:查找指定目录的第一个文件或目录并返回它的句柄

函数原型 :
HANDLE FindFirstFile(
LPCTSTR lpFileName, // 目录名
LPWIN32_FIND_DATA lpFindFileData // 数据缓冲区
);

参数:

lpFileName
[输入] 指向字符串的指针用于指定一个有效的目录。

lpFindFileData
[输出] 指向一个WIN32_FIND_DATA的指针,用于存放找到文件或目录的信息。

返回值:
如果成功,则返回找到文件或目录的句柄。在FindNextFile和FindClose函数中会用到此句柄。
如果失败,返回INVALID_HANDLE_VALUE。要获得更多的信息调用GetLastError函数。

备注:
指定目录的形式应该为"..\\abc\\*.*" 就是在abc目录中找第一个文件或目录。
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;

使用环境:
windows nt 3.1 和以后都可以使用
windows 95 和以后都可以使用
头文件 windows.h
使用 Kernel32.lib 库

示例代码段
#include "windows.h"

int main(int argc, char *argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;

printf ("Target file is %s.\n", argv[1]);

hFind = FindFirstFile(argv[1], &FindFileData); //注意目录的形式后面要有*.*

if (hFind == INVALID_HANDLE_VALUE) {
printf ("Invalid File Handle. Get Last Error reports %d\n", GetLastError ());
} else {
printf ("The first file found is %s\n", FindFileData.cFileName);
FindClose(hFind);
}

return (0);
}

下面是一个输出目录里所用文件名的代码:

#include<iostream>
#include<stdio.h>
#include<windows.h>
#include<winbase.h>
#include<string.h>
using namespace std;
//遍历一个目录的文件。
//蔡军生 2007/10/25 QQ:9073204 深圳
class CFindFile
{
public:
CFindFile(void)
{
m_hFind = INVALID_HANDLE_VALUE;
m_bFound = false;
memset(&m_FindFileData,0,sizeof(m_FindFileData));
}
~CFindFile(void)
{
if (m_hFind != INVALID_HANDLE_VALUE)
{
::FindClose(m_hFind);
}
}
//找到第一个文件。
void First(LPCTSTR lpFileName)
{
m_hFind = ::FindFirstFile(lpFileName,&m_FindFileData);
if (m_hFind != INVALID_HANDLE_VALUE)
{
m_bFound = true;
}
else
{
m_bFound = false;
}
}
//查找一下文件。
void Next(void)
{
m_bFound = FindNextFile(m_hFind, &m_FindFileData) ? true:false;
}
//是否可以查找一下文件。
bool IsOK(void) const
{
return m_bFound;
}
//返回当前文件的属性。
const WIN32_FIND_DATA& GetCurFile(void)
{
return m_FindFileData;
}
protected:
HANDLE m_hFind; //保存当查找的位置句柄。
bool m_bFound; //当前查找是否成功。
WIN32_FIND_DATA m_FindFileData;//保存当前文件的属性。
};

int main()
{
char *a="C:\\*";
CFindFile findDemo;
for (findDemo.First(a);
findDemo.IsOK();
findDemo.Next())
{
cout<<findDemo.GetCurFile().cFileName;
cout<<"xx\n";
}
return 0;
}

这样查询到的结果会包括 .和..



void DirectoryList(LPCSTR Path)
{
	WIN32_FIND_DATA FindData;
	HANDLE hError;
	int FileCount = 0;
	char FilePathName[LEN];

	char FullPathName[LEN];
	strcpy(FilePathName, Path);
	strcat(FilePathName, "\\*.*");
	hError = FindFirstFile(FilePathName, &FindData);
	if (hError == INVALID_HANDLE_VALUE)
	{
		printf("Search error!");
		return;
	}
	while(::FindNextFile(hError, &FindData))
	{
		if (strcmp(FindData.cFileName, ".") == 0 
			|| strcmp(FindData.cFileName, "..") == 0 )
		{
			continue;
		}

		wsprintf(FullPathName, "%s\\%s", Path,FindData.cFileName);
		FileCount++;
		printf("\n%d  %s  ", FileCount, FullPathName);

		if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			printf("<Dir>");
			DirectoryList(FullPathName);
		}
	}
}


分享到:
评论

相关推荐

    C++ 遍历目录文件并类分装

    Windows操作系统提供了FindFirstFile、FindNextFile和FindClose等API函数,用于遍历目录中的文件。例如: ```cpp HANDLE hFind; WIN32_FIND_DATA data; hFind = FindFirstFile("C:\\path\\to\\directory\\*", &...

    vc++硬盘扫描程序=遍历某个目录下的所有文件,含子目录下的文件.zip

    1. **目录遍历**:在Windows系统中,可以使用`FindFirstFile`、`FindNextFile`和`FindClose`函数来遍历目录中的文件和子目录。这些函数是Windows API的一部分,允许开发者获取目录中文件的信息,包括文件名、大小、...

    VC++利用CFileFind类遍历目录文件 并显示在树视图控件中 不同层级用不同的图标

    在VC++编程环境中,开发一个能够遍历目录文件并显示在树视图控件的应用程序是一项常见的任务。这里,我们主要关注的是如何利用CFileFind类来实现这一功能,并且在不同层级上使用不同的图标来区分目录和文件。...

    windows文件遍历

    对于开发者来说,Windows提供了各种API函数进行文件遍历,如FindFirstFile、FindNextFile等,用于在程序中遍历文件。此外,C#、Python等编程语言也有相应的库支持文件遍历,如C#的DirectoryInfo和FileInfo类,Python...

    易语言API取文件目录列表

    在这个场景中,我们主要关注三个API函数:FindFirstFile、FindNextFile和FindClose,这些都是易语言中用于遍历文件目录的常用函数。 1. **FindFirstFile**: 这个函数是遍历文件目录的第一步,它接受一个包含通配符...

    几百个常用的 API 函数的简介

    CreateDirectory和RemoveDirectory用于管理文件系统的目录,而FindFirstFile和FindNextFile则用于遍历目录中的文件和子目录。 网络编程中,Winsock库提供了大量的API函数,如socket用于创建套接字,bind将套接字与...

    VC++ 使用递推 递归法删除目录的小例子 源码

    `FindFirstFile`和`FindNextFile`用来遍历目录中的文件和子目录,`RemoveDirectory`则用于删除指定的目录。需要注意的是,由于递归的特性,我们需要确保正确地管理递归调用的堆栈,避免无限循环或堆栈溢出的问题。 ...

    VC 递归和非递归算法遍历磁盘文件

    在VC++环境中,使用`FindFirstFile`、`FindNextFile`和`FindClose`等API函数可以方便地实现这两种遍历方式。这些函数允许你根据文件名或文件类型筛选文件,并提供关于文件的详细信息。 例如,以下是一个简单的递归...

    (KELOMPOK-1_BK) ANANDA DWI PUSPITA SARI_Windows编程_

    CreateFile、ReadFile和WriteFile函数是进行文件操作的核心,而FindFirstFile和FindNextFile则用于遍历目录。 总的来说,"Windows编程"是一个广泛且深入的主题,涵盖了操作系统层面的多个方面。ANANDA DWI PUSPITA ...

    apifilesearch_visualbasic_

    例如,API函数`FindFirstFile`和`FindNextFile`可以用于遍历目录和文件,`CreateFile`用于打开或创建文件,`GetFileAttributes`获取文件属性,这些都是在文件搜索中常见的API调用。 首先,要实现文件搜索,我们需要...

    labview 常用API工具 vi

    7. **文件和目录操作**:虽然LabVIEW有内置的文件I/O函数,但有时需要使用更底层的API,如`CreateFile`、`ReadFile`、`WriteFile`进行文件读写,`FindFirstFile`和`FindNextFile`遍历目录。 8. **图形和图像处理**...

    子目录下根据一定得条件拷贝文件及其子目录

    在这个程序中,可能会使用到的操作系统API,如Windows API中的`FindFirstFile`、`FindNextFile`、`CreateDirectory`和`CopyFile`等,来实现遍历目录、查找文件、创建目标目录以及复制文件的功能。此外,为了实现条件...

    Windows API参考

    此外,FindFirstFile和FindNextFile用于遍历目录。 8. **网络编程**:Windows Sockets(Winsock)是Windows API的一部分,提供了一套标准接口用于网络通信,如socket函数创建套接字,connect和accept处理连接请求,...

    显示数状目录的组合框.rar_组合框

    这通常通过调用操作系统提供的API函数实现,例如在Windows上使用`FindFirstFile`、`FindNextFile`和`FindClose`等函数。 3. **动态加载数据**:在程序运行时,我们可以通过循环遍历目录并添加每个目录到组合框的...

    vc.rar_目录操作

    在Windows环境下,VC++ 6.0是一款经典的C++集成开发环境,用于编写和调试C++...同时,`FindFirstFile()`和`FindNextFile()`可以用来遍历目录结构,执行批量操作。了解和熟练掌握这些函数是进行文件和目录操作的基础。

    获取文件目录

    - **Windows API**:在Windows环境下,可以使用API函数如`FindFirstFile`、`FindNextFile`和`FindClose`来遍历目录和子目录中的文件。 - **POSIX**:在Linux或Unix系统中,`opendir`、`readdir`和`closedir`函数...

    dirent.h文件,vs2010、vs2013等MFC框架常用类

    2. 在Windows API中,有类似的`FindFirstFile()`、`FindNextFile()`和`FindClose()`函数可以用来遍历目录,但`dirent.h`提供了一种更接近于Unix风格的接口,对于熟悉这种风格的开发者来说,使用起来可能更加方便。...

    Win32 API (最常用的API函数信息)

    此外,`FindFirstFile`和`FindNextFile`用于遍历目录。 5. **进程和线程**:Win32 API提供了创建和管理进程和线程的函数。`CreateProcess`启动新进程,`CreateThread`创建线程,`WaitForSingleObject`和`...

    Windows路径操作API函数.zip_Windows路径操作API函数

    - 这些函数用于遍历目录中的文件和子目录。`FindFirstFile` 返回第一个匹配的文件或目录的信息,`FindNextFile` 继续查找下一个,而 `FindClose` 用于关闭查找句柄。 6. `SetCurrentDirectory` 和 `...

    HookFindNextFile

    `FindFirstFile`和`FindNextFile`是一对常用的API,用于在目录中查找匹配特定条件的文件。当一个程序调用`FindNextFile`时,系统通常会返回目录中的下一个文件信息。通过Hook这个函数,我们可以改变其默认行为,比如...

Global site tag (gtag.js) - Google Analytics