如何列举目录下的文件

本文介绍了一种使用FindFirstFile与FindNextFile函数来枚举指定目录下所有.txt文件的方法,并提供了完整的C++代码实现。此外,还展示了如何通过文件对话框获取目标路径。
如何列举一个目录下的文件

飘飘白云 2008.04.04

取得一个目录路径之后,使用FindFirstFile与FindNextFile就可以列举该目录的所有子目录以及所有文件。下面贴段列举指定目录下所有特定后缀(.txt)文件。

1voidgetTxtFileByDirectory(constCStringW&dirPath)
2{
3nutVec.clear();
4path=dirPath;
5
6WIN32_FIND_DATAffd;
7LARGE_INTEGERfilesize;
8HANDLEhFind;
9
10CStringWnutFile;
11nutFile.Format(L"%s//*.txt",path);
12
13//Checkthattheinputpathplus2isnotlongerthanMAX_PATH.
14size_tlength;
15StringCchLength(nutFile,MAX_PATH,&length);
16
17if(length>(MAX_PATH-2)){
18CStringWdbgInfo;
19dbgInfo.Format(L"Directory%sistoolong!/n",path);
20OutputDebugString(dbgInfo);
21return;
22}

23
24hFind=FindFirstFile(nutFile,&ffd);
25if(hFind==INVALID_HANDLE_VALUE){
26return;
27}

28
29do{
30filesize.LowPart=ffd.nFileSizeLow;
31filesize.HighPart=ffd.nFileSizeHigh;
32
33CStringWdbgInfo;
34dbgInfo.Format(L"%s%ldbytes/n",ffd.cFileName,filesize.QuadPart);
35OutputDebugString(dbgInfo);
36
37nutVec.push_back(ffd.cFileName);
38}
while(FindNextFile(hFind,&ffd)!=0);
39
40FindClose(hFind);
41}

调用该函数之后,output窗口输出文件名以及文件大小信息:

0000000000000001.txt365bytes
0000000000000002.txt494bytes
0000000000000003.txt352bytes
0000000000000004.txt468bytes
0000000000000005.txt366bytes
0000000000000006.txt461bytes
0000000000000007.txt375bytes
000000000000000a.txt
375bytes
000000000000000b.txt
382bytes

关于路径的取得,可以使用打开文件对话框获得,相应代码如下:


1OPENFILENAMEWofn;//commondialogboxstructure
2wchar_tszFile[260];//bufferforfilename
3ZeroMemory(&ofn,sizeof(ofn));
4ofn.lStructSize=sizeof(ofn);
5ofn.hwndOwner=NULL;
6ofn.lpstrFile=szFile;
7ofn.lpstrTitle=L"Selectanutfiletosetadirectoryforautoload";
8ofn.lpstrFile[0]=L'/0';
9ofn.nMaxFile=sizeof(szFile);
10ofn.lpstrFilter=L"nut/0*.nut";
11ofn.nFilterIndex=1;
12ofn.lpstrFileTitle=NULL;
13ofn.nMaxFileTitle=0;
14ofn.lpstrInitialDir=path;
15ofn.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;
16
17//Openfiledialogbox.
18if(GetOpenFileNameW(&ofn)==TRUE){
19if(ofn.lpstrFile){
20size_tlen=wcslen(ofn.lpstrFile);
21szFile[len]=L'/0';
22
23CStringWfullPath;
24fullPath.Format(L"%s",szFile);
25
26HLUint32n=fullPath.ReverseFind(L'//');
27if(n>0){
28path=fullPath.Left(n);
29}

30}

31}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值