windows编程之文件遍历

很多时我们需要对文件进行遍历,这里我将对其进行简要介绍。

首先,我们来看几个api和结构体,第一个叫WIN32_FIND_DATA结构体,声明如下:

typedef struct _WIN32_FIND_DATA {
  DWORD    dwFileAttributes; 		//文件属性
  FILETIME ftCreationTime; 		//文件创建时间
  FILETIME ftLastAccessTime; 		//文件最后一次访问时间
  FILETIME ftLastWriteTime; 		//文件最后一次修改时间
  DWORD    nFileSizeHigh; 		//文件大小,高32位
  DWORD    nFileSizeLow;		//文件大小,低32位 
  DWORD    dwReserved0; 		//如果第一个参数是FILE_ATTRIBUTE_REPARSE_POINT,则该参数指定了重分析点标志,否则为系统保留
  DWORD    dwReserved1; 		//系统保留使用
  TCHAR    cFileName[ MAX_PATH ]; 	//文件名
  TCHAR    cAlternateFileName[ 14 ]; 	//8.3格式文件名
} WIN32_FIND_DATA, *PWIN32_FIND_DATA; 

第二个API是FindFirstFile,声明如下:

HANDLE FindFirstFile(  
  LPCTSTR lpFileName,               // 文件名(要包括路径)
  LPWIN32_FIND_DATA lpFindFileData  // 文件信息结构体
);

第三个API是FindNextFile,声明如下:

BOOL FindNextFile(  
  HANDLE hFindFile,                // 搜索的文件句柄,该参与上一个API的返回值相同
  LPWIN32_FIND_DATA lpFindFileData // 文件信息结构体
);

第四个是FindClose,声明如下:

BOOL FindClose(  
  HANDLE hFindFile   // 文件搜索句柄,该参与FindFirstFile的返回值相同
);

附上搜索指定路径下的所有文件夹及文件的代码:

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


void FindFile(const std::string strPath)
{

	WIN32_FIND_DATAA  findData = { 0 };
	string strFindPath = strPath + "\\*.*";
	//查找第一个文件
	HANDLE hFindFine = FindFirstFileA(strFindPath.c_str(), &findData);
	if (INVALID_HANDLE_VALUE == hFindFine)
		printf("Error:%d", GetLastError());
	//循环递归查找文件
	do
	{
		//判断该文件是否为文件夹
		if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			if (findData.cFileName[0] == '.')
				continue;
			cout << "在" << strPath << "找到文件夹:\t" << findData.cFileName << endl;
			string strNeedFindPaht = strPath + "\\" + findData.cFileName;
			//若该文件是文件夹,则递归进行查找该文件夹下的文件
			FindFile(strNeedFindPaht);
		}
		else
		{
			cout << "在" << strPath << "找到文件:\t" << findData.cFileName << endl;
		}
	} while (FindNextFileA(hFindFine, &findData));
	//关闭文件搜索句柄
	FindClose(hFindFine);
}


int _tmain(int argc, _TCHAR* argv[])
{
	//搜索D盘下Test文件夹下的所有文件
	string strFilePath = "D:\\Test\\";
	FindFile(strFilePath);
	return 0;
}


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值