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 
#include 
#include 
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;
}


你可能感兴趣的:(windows编程)