SHGetFileInfo调用N次后罢工,救命!
如上:代码如下,看了内存会增长很快,真心找不到问题所在,感觉是SHGetFileInfo是它调用很多次后,把内存弄得很高,结果后面图标就不见了!什么情况啊。
while(hfile!= INVALID_HANDLE_VALUE ) { strTemp = fileDate.cFileName; if(!SHGetFileInfo(start+_T("\\")+strTemp,0,&shFi,sizeof(SHFILEINFO),SHGFI_ICON)&& strTemp != "." && strTemp != "..") { if(SHGetFileInfo(start+_T("\\")+strTemp,0,&shFi,sizeof(SHFILEINFO),SHGFI_ICON|SHGFI_PIDL)) goto line; break; } line: if((fileDate.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && strTemp != "." && strTemp != ".."){ //posFile=imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2)); posFile=imageList.Add(shFi.hIcon); root=treeCtrl.InsertItem(strTemp,posFile,posFile,TVI_ROOT,root); DestroyIcon(shFi.hIcon); //MessageBox(_T("dgd")); } if(!(fileDate.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && strTemp != "." && strTemp != ".."){ pos=imageList.Add(shFi.hIcon); DestroyIcon(shFi.hIcon); item=treeCtrl.InsertItem(strTemp,pos,pos,TVI_ROOT,item); } bool isNextFile = FindNextFile(hfile,&fileDate);//判断该目录下是否还有文件 if(isNextFile == 0) { break; } }
HANDLE hFindFile;WIN32_FIND_DATA w32fd;hFindFile = FindFirstFile(szWildcard, &w32fd);if (hFindFile != INVALID_HANDLE_VALUE) { do { if (w32fd.cFileName == _T(".") || w32fd.cFileName != _T("..")) { continue; } if (w32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // } else { // } } while (FindNextFile(hFindFile, &w32fd)); FindClose(hFindFile);}