VC C++ 遍历指定目录 Windows API


HANDLE FindFirstFile( LPCTSTR lpFileName,  
 LPWIN32_FIND_DATA lpFindFileData   
);
BOOL FindNextFile( HANDLE hFindFile,  
 LPWIN32_FIND_DATA lpFindFileData  
);
复制代码
#include <windows.h>
#include <stdio.h>

/* ************************************
* DWORD EnumerateFileInDrectory(LPSTR szPath)
* 功能 遍历目录下的文件和子目录,将显示文件的
* 文件和文件夹隐藏、加密的属性
* 参数 LPTSTR szPath,为需遍历的路径
* 返回值 0代表执行完成,1代码发生错误
*************************************
*/
DWORD EnumerateFileInDrectory(LPSTR szPath)
{
WIN32_FIND_DATA FindFileData;
HANDLE hListFile;
CHAR szFilePath[MAX_PATH];

//构造代表子目录和文件夹路径的字符串,使用通配符“*”
strcpy(szFilePath, szPath);
//注释的代码可以用于查找所有以“.txt结尾”的文件。
//lstrcat(szFilePath, "\\*.txt");
strcat(szFilePath, "\\*");
//查找第一个文件/目录,获得查找句柄
hListFile = FindFirstFile(szFilePath,&FindFileData);
//判断句柄
if(hListFile==INVALID_HANDLE_VALUE)
{
printf("错误:%d",GetLastError());
return 1;
}
else
{
do
{
/* 如果不想显示代表本级目录和上级目录的“.”和“..”,
可以使用注释部分的代码过滤。
if(lstrcmp(FindFileData.cFileName,TEXT("."))==0||
lstrcmp(FindFileData.cFileName,TEXT(".."))==0)
{
continue;
}
*/
//打印文件名、目录名
printf("%s\t\t",FindFileData.cFileName);
//判断文件属性,加密文件或文件夹
if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_ENCRYPTED)
{
printf("<加密> ");
}
//判断文件属性,隐藏文件或文件夹
if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN)
{
printf("<隐藏> ");
}
//判断文件属性,目录
if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
printf("<DIR> ");
}
//读者可根据文件属性表中的内容自行添加判断文件属性。
printf("\n");
}
while(FindNextFile(hListFile, &FindFileData));
}
return 0;
}

/* ************************************
* int main(int argc, PCHAR argv[])
* 功能 调用ListFileInDrectory
* 遍历目录下的文件和子目录
* 参数 argv[1]为需遍历的路径,如果为空则获取
* 当前路径
*************************************
*/
int main(int argc, char *argv[])
{
if(argc == 2)
{
EnumerateFileInDrectory(argv[1]);
}
else
{
CHAR szCurrentPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH,szCurrentPath);
EnumerateFileInDrectory(szCurrentPath);
}
getchar();
return 0;
}
复制代码
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值