Whoops, sorry - I've had a long day and brain is frazzled! Doing it this way you don't need to allocate memory as that would cause a memory leak! You just need lvi.pszText = data2.cFileName. My FindNextFile line somehow got corrupted when copied. The code should be

Code:
void CThisDlg::OnOK() 
{
int iNum = 0;

HANDLE hFind;

WIN32_FIND_DATA data2;

LV_ITEM lvi;

    lvi.mask = LVIF_TEXT; 
    lvi.iSubItem = 0;

    hFind = FindFirstFile("*.*", &data2);
    while (hFind != INVALID_HANDLE_VALUE) {
         if (data2.dwFileAttributes == FILE_ATTRIBUTE_ARCHIVE) {
              lvi.iItem = iNum++; 
              lvi.pszText = data2.cFileName;
              m_list.InsertItem(&lvi);
         }
         if (!FindNextFile(hFind, &data2)) hFind = INVALID_HANDLE_VALUE;
     }
}