/************************************************************************** *sub_dir.c 深度遍历目录下的文件和子目录 ****************************************************************************/ #include<windows.h> #include<stdio.h> /***************************************************************************** *DWORD EnumerateFileInDirectory(LPSTR szPath) *功能:遍历目录下的文件和子目录,将显示文件夹和文件隐藏加密的属性 *参数:LPSTR szPath 序遍历的路径 *返回值:0失败,1成功 *******************************************************************************/ DWORD EnumerateFileInDirectory(LPSTR szPath) { char szFilePath[MAX_PATH]; char szFullPath[MAX_PATH]; WIN32_FIND_DATA FindFileData; HANDLE hListFile; lstrcpy(szFilePath,szPath); lstrcat(szFilePath,"//*"); hListFile=FindFirstFile(szFilePath,&FindFileData); if(hListFile==INVALID_HANDLE_VALUE) { printf("查找第一个文件失败,错误:%d",GetLastError()); return 1; } do { if(lstrcmp(FindFileData.cFileName,TEXT("."))==0||lstrcmp(FindFileData.cFileName,TEXT(".."))==0) continue; lstrcpy(szFullPath,szPath); lstrcat(szFullPath,"//"); lstrcat(szFullPath,FindFileData.cFileName); printf("%s/t/t",szFullPath); if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_ENCRYPTED) printf("<加密>"); if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN) printf("<隐藏>"); if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) { printf("<目录>"); EnumerateFileInDirectory(szFullPath); } printf("/n"); } while(FindNextFile(hListFile,&FindFileData)); return 1; } /************************************************************************ *int main(int argc,char* argv[]) *功能:调用EnumerateFileInDirectory遍历目录下的文件和子目录 *参数:argv[1]为需遍历的路径,为空则遍历当前路径 *************************************************************************/ int main(int argc,char* argv[]) { if(2==argc) { EnumerateFileInDirectory(argv[1]); } else { char szCurrentPath[MAX_PATH]; GetCurrentDirectory(MAX_PATH,szCurrentPath); EnumerateFileInDirectory(szCurrentPath); } system("pause"); return 0; }