Click here to Skip to main content
12,506,841 members (64,071 online)
Click here to Skip to main content
Add your own
alternative version

Stats

91.4K views
1K downloads
29 bookmarked
Posted

Recursively listing file type information and icon

, 21 Jun 2001
Rate this:
Please Sign up or sign in to vote.
Code to recursively search folders to display file type information and icons
<!-- Download Links --> <!-- Main HTML starts here -->

Introduction

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 :-)

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

BLaZe
United States United States
My name is BLaZe and I have 15 years old

You may also be interested in...

Pro
Pro

Comments and Discussions

 
GeneralThe icons disappear in W98. Pin
Tomas21-Apr-03 7:29
memberTomas21-Apr-03 7:29 
GeneralRe: The icons disappear in W98. Pin
Ridgeley Yu2-Jun-03 17:37
memberRidgeley Yu2-Jun-03 17:37 
GeneralRe: The icons disappear in W98. Pin
Tomas2-Jun-03 21:53
memberTomas2-Jun-03 21:53 
GeneralRe: The icons disappear in W98. Pin
Ridgeley Yu3-Jun-03 2:29
memberRidgeley Yu3-Jun-03 2:29 
GeneralRe: The icons disappear in W98. Pin
Tomas3-Jun-03 20:10
memberTomas3-Jun-03 20:10 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160927.1 | Last Updated 22 Jun 2001
Article Copyright 2001 by BLaZe
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid