HANDLE WINAPI FindFirstFile( _In_ LPCTSTR lpFileName, _Out_ LPWIN32_FIND_DATA lpFindFileData);FindFirstFile()用于查找当前目录下的第一个文件名称,返回一个句柄FineNextFile()利用上面返回的句柄查找当前目录中的下一个文件//文件属性信息//#define FILE_SHARE_READ 0x00000001 //#define FILE_SHARE_WRITE 0x00000002 //#define FILE_SHARE_DELETE 0x00000004 //#define FILE_ATTRIBUTE_READONLY 0x00000001 //#define FILE_ATTRIBUTE_HIDDEN 0x00000002 //#define FILE_ATTRIBUTE_SYSTEM 0x00000004 //#define FILE_ATTRIBUTE_DIRECTORY 0x00000010 //#define FILE_ATTRIBUTE_ARCHIVE 0x00000020 //#define FILE_ATTRIBUTE_DEVICE 0x00000040 //#define FILE_ATTRIBUTE_NORMAL 0x00000080 //#define FILE_ATTRIBUTE_TEMPORARY 0x00000100 //#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 //#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 //#define FILE_ATTRIBUTE_COMPRESSED 0x00000800 //#define FILE_ATTRIBUTE_OFFLINE 0x00001000 //#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 //#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 //#define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000 //#define FILE_ATTRIBUTE_VIRTUAL 0x00010000 //#define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000#include <Windows.h>#include <vector>#include <iostream>#include "string"using std::vector;using namespace std;void PrintAllFileName(string start);int main(){ string start = "E:";PrintAllFileName(start); getchar();return 0;}//打印文件夹下所有普通文件文件名void PrintAllFileName(string start){HANDLE hFile;WIN32_FIND_DATA FindFileData;string strpush;//定义缓存空间存放文件夹信息vector<string>tchFileName;//将顶层目录路径压入栈中tchFileName.push_back(start); while (!tchFileName.empty()){//提取tchFileName栈顶目录信息strpush = tchFileName.back();//删除栈顶目录信息tchFileName.pop_back();//查找该目录下第一个文件hFile = FindFirstFile(((strpush + "\\*.*").c_str()), &FindFileData);tchFileName.size();//没有查找到文件if (hFile == INVALID_HANDLE_VALUE){continue;}//目录文件 //if判断语句中必须使用&操作符if ((FindFileData.cFileName[0] != '.' ) //用来过滤上层和下层目录名称&&!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)&&!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)){if((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)){//普通目录 将文件索引保存到tchFileName栈中tchFileName.push_back(strpush + "\\" + FindFileData.cFileName);}else{//普通文件 打印文件名cout<<FindFileData.cFileName<<endl; }}//判断该目录下是否还有其他文件while(FindNextFile(hFile, &FindFileData)){//目录文件if ((FindFileData.cFileName[0] != '.' )&&!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)&&!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)){if((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)){//普通目录 将文件索引保存到tchFileName栈中tchFileName.push_back(strpush + "\\" + FindFileData.cFileName);}else{//普通文件 打印文件名cout<<FindFileData.cFileName<<endl; }} }}::FindClose(hFile);}