|
Here I developed some code that uses the CFileFind
Class to search the selected Drive or
Folder recursively and display the file information and icon in a list control.
BOOL CShellDlg::ListFile(LPCTSTR szPath) { CFileFind ff; CString path = szPath; path += "\\*.*"; BOOL res = TRUE; CWaitCursor waiter; if(ff.FindFile(path)) { while(res) { m_List.LockWindowUpdate(); res = ff.FindNextFile(); if(!ff.IsDots()) { counter++; CString file = ff.GetFilePath(); int i = m_List.InsertItem(0,ff.GetFileName(), GetIconIndex(ff.GetFilePath())); CString size; if (ff.GetLength64() < 1024) size.Format("%d B",ff.GetLength()); else { // The following weird LONGLONG casts are because VC 6.0 // doesn't implement int64 to double conversion =8-ooo if (ff.GetLength64() < (1024*1024)) size.Format("%3.2f KB", (LONGLONG) ff.GetLength64() / 1024.0); else { if (ff.GetLength64() < (1024*1024*1024)) size.Format("%3.2f MB", (LONGLONG) ff.GetLength64() / (1024*1024.0)); else size.Format("%1.2f GB", (LONGLONG) ff.GetLength64() / (1024.0*1024*1024)); } } m_List.SetItemText(i,1,size); CString type = GetTypeName(ff.GetFilePath()); m_List.SetItemText(i,2,type); CString date; CTime time; ff.GetCreationTime(time); date = time.Format("%x"); m_List.SetItemText(i,3,date); m_List.SetItemText(i,4,ff.GetFilePath()); if(ff.IsDirectory()) { path = ff.GetFilePath(); ListFile(path); } m_aniIcon.SetIcon(h_aIcon[m_icon]); m_icon++; if(m_icon >= ICONS) { m_icon = 0; } CString sin = ff.GetRoot(); m_SearchIN.SetWindowText(sin); m_fFiles.SetWindowText(file); CString found; found.Format("%u",m_List.GetItemCount()); m_Count.SetWindowText(found); } } m_List.UnlockWindowUpdate(); } return TRUE; } TCHAR* CShellDlg::GetTypeName(CString strFPath) { SHFILEINFO sfi; memset(&sfi;, 0, sizeof(sfi)); static TCHAR lpBuff[MAX_PATH]; lpBuff[0] = TCHAR ('\0'); SHGetFileInfo ( strFPath, 0, &sfi;, sizeof(sfi), SHGFI_TYPENAME ); lstrcpy(lpBuff, sfi.szTypeName); if (lpBuff[0] == TCHAR('\0')) { int nDotIdx = strFPath.ReverseFind (TCHAR('.')); int nBSIdx = strFPath.ReverseFind (TCHAR('\\')); if (nDotIdx > nBSIdx) { strFPath = strFPath.Mid(nDotIdx+1); strFPath.MakeUpper(); lstrcpy (lpBuff, strFPath + TCHAR (' ')); } lstrcat (lpBuff, _T("File")); } return lpBuff; } int CShellDlg::GetIconIndex(const CString &csFileName;) { SHFILEINFO sfi; SHGetFileInfo( (LPCTSTR)csFileName, 0, &sfi;, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON ); return sfi.iIcon; }
Thank you to all of you :-)
My name is BLaZe and I have 15 years old
|
Home >>
Files & Folders >>
General
Advertise on The Code Project |
Article content copyright BLaZe, 2001 everything else © CodeProject, 1999-2001. |