| void enum_path(char *cpath){ WIN32_FIND_DATA wfd; HANDLE hfd; char cdir[MAX_PATH]; char subdir[MAX_PATH]; int r; GetCurrentDirectory(MAX_PATH,cdir); SetCurrentDirectory(cpath); hfd = FindFirstFile("*.*",&wfd); if(hfd!=INVALID_HANDLE_VALUE) { do{ if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if(wfd.cFileName[0] != '.') { // 合成完整路径名 sprintf(subdir,"%s\\%s",cpath,wfd.cFileName); // 递归枚举子目录 enum_path(subdir); } }else{ printf("%s\\%s\n",cpath,wfd.cFileName); // 病毒可根据后缀名判断是 // 否要感染相应的文件 } }while(r=FindNextFile(hfd,&wfd),r!=0); } SetCurrentDirectory(cdir); } |
| void nr_enum_path(char *cpath){ list<string> dir_list; string cdir,subdir; WIN32_FIND_DATA wfd; HANDLE hfd; int r; dir_list.push_back(string(cpath)); while(dir_list.size()) { cdir = dir_list.back(); dir_list.pop_back(); SetCurrentDirectory(cdir.c_str()); hfd = FindFirstFile("*.*",&wfd); if(hfd!=INVALID_HANDLE_VALUE) { do{ if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if(wfd.cFileName[0] != '.') { // 合成完整路径名 subdir=cdir+"\\"+wfd.cFileName; cout<<"push subdir: "<<subdir<<endl; // 递归枚举子目录 dir_list.push_back(string(subdir)); } }else{ printf("%s\\%s\n",cpath,wfd.cFileName); // 病毒可根据后缀名判断 // 是否要感染相应的文件 } }while(r=FindNextFile(hfd,&wfd),r!=0); } }//end while } |