FindFirstFile()根据文件名查找文件,函数执行成功返回一个搜索句柄,出错则返回INVALID_HANDLE_VALUE常数,查找结束应该用FindClose函数关闭搜索句柄。函数原型:
HANDLE WINAPI FindFirstFile( _In_ LPCTSTR lpFileName, _Out_ LPWIN32_FIND_DATA lpFindFileData );lpFileName为欲搜索的文件名。格式可如下:
c:\Windows\*
//在c:\Windows目录中查找所有文件
c:\Windows\System32\*.dll
//在c:\Windows\System32目录中查找所有dll文件
c:\Windows\System.ini ;在c:\Windows目录中查找System.ini文件
c:\Windows\a???.*
// 在c:\Windows目录中查找所有以a开头的文件名长度.为4个字符的文件
lpFindFileData为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 ]; // 8.3格式文件名
} WIN32_FIND_DATA, *PWIN32_FIND_DATA;
dwFileAttributes字段可以是下面取值的组合,通过这个字段可以检查找到的究竟是一个文件还是一个子目录,以及其他的文件属性:
● FILE_ATTRIBUTE_ARCHIVE——文件包含归档属性。
● FILE_ATTRIBUTE_COMPRESSED——文件和目录被压缩。
● FILE_ATTRIBUTE_DIRECTORY——找到的是一个目录。
● FILE_ATTRIBUTE_HIDDEN——文件包含隐含属性。
● FILE_ATTRIBUTE_NORMAL——文件没有其他属性。
● FILE_ATTRIBUTE_READONLY——文件包含只读属性。
● FILE_ATTRIBUTE_SYSTEM——文件包含系统属性。
● FILE_ATTRIBUTE_TEMPORARY——文件是一个临时文件。
调用完FindFirstFile()后可以调用FindNextFile()函数查找下一个文件,函数原型:
BOOL WINAPI FindNextFile( _In_ HANDLE hFindFile, _Out_ LPWIN32_FIND_DATA lpFindFileData );eg:遍历文件夹,输出普通文件或目录名
PrintFileName("E:\\");
void PrintFileName(char* m_pFileDirectory)
{
char pLogFileDirectory[MAX_PATH] = { 0 };
strcpy_s(pLogFileDirectory, MAX_PATH, m_pFileDirectory);
int iLen = strlen(pLogFileDirectory);
pLogFileDirectory[iLen] = '*';
pLogFileDirectory[iLen+1] = 0;
WIN32_FIND_DATAA findFileData;
HANDLE hFind = FindFirstFileA(pLogFileDirectory, &findFileData);
if (INVALID_HANDLE_VALUE == hFind)
{
int iErrno = GetLastError();
return;
}
BOOL bRet = FALSE;
for (;;)
{
if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//目录
if (!strcmp(findFileData.cFileName, ".") || !strcmp(findFileData.cFileName, ".."))
{
//.或..
}
else
{
if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)
{
//系统目录
}
else
{
if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
{
//隐藏目录
}
else
{
//普通目录
printf("%s\n", findFileData.cFileName);
}
}
}
}
else
{
//文件
if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)
{
//系统文件
}
else
{
if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
{
//隐藏文件
}
else
{
//普通文件
printf("%s\n", findFileData.cFileName);
}
}
}
bRet = FindNextFileA(hFind, &findFileData);
if (!bRet)
break;
}
FindClose(hFind);
}
文章出处:http://baike.baidu.com/link?url=DxvpykBeeJxMOeWj39T8XeisYrpZ9vl6Apyi1zr-CA4Q4Jj80gjJotKZ8Is242i76N4PPaeyBfWaTwvBcA_56K
参考文章:http://www.cnblogs.com/chenkunyun/archive/2012/03/24/2415727.html