mfc VC 想请各位帮忙看下问题出在哪里 在list控件上显示不出我所想要的文件夹名称

void Cdm_01Dlg::TravelFolder(CString strDir, int nDepth)

{

CFileFind filefind; //声明CFileFind类型变量

CString strWildpath = strDir + _T("//*.*"); //所有文件都列出。

int i = 0;
CListCtrl pList = (CListCtrl)GetDlgItem(IDC_LIST);
pList -> InsertItem(0, _T(""));
if(filefind.FindFile(strWildpath, 0)) //开始检索文件

{

BOOL bRet = TRUE;

while(bRet)

{

bRet = filefind.FindNextFile(); //枚举一个文件

if(filefind.IsDots()) //如果是. 或 .. 做下一个

continue;

        if(!filefind.IsDirectory())                         //不是子目录,把文件名打印出来  
        {  
            CString strTextOut = strDir + CString(_T("//")) + filefind.GetFileName();  
            pList->SetItemText(i, 0, strTextOut);
            i++;
            //m_StrOut += strTextOut;
            //m_StrOut += _T("\r\n");
        }  
        else                                                //如果是子目录,递归调用该函数  
        {  
            CString strTextOut = strDir + CString(_T("//")) + filefind.GetFileName();  
            pList->SetItemText(i, 0, strTextOut);
            i++;
            TravelFolder(strTextOut, nDepth + 1);//递归调用该函数打印子目录里的文件  
        }  
    }  
    filefind.Close();  
}  

}





2个回答

pList->SetItemText(i, 0, strTextOut);
应该用 AddString

在调用InsetItem、SetItem和SetItemText等成员函数之前,必须插入相应的列。这项工作可以在对话框的OnInitDialog函数中完成。参考下面的代码:

BOOL Cdm_01Dlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // 一些初始化代码

    // TODO: 在此添加额外的初始化代码
    CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST);
    pList->InsertColumn(0, _T("文件名"), LVCFMT_LEFT, 512);
    pList->InsertColumn(1, _T("创建日期"), LVCFMT_LEFT, 128);

    return TRUE;  
}

下面是修改后的TravelFolder函数:

void Cdm_01Dlg::TravelFolder(CString strDir, int nDepth)
{
    CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST);

    CFileFind filefind; 
    CString strWildpath = strDir+ _T("\\*.*"); //
    BOOL bContinue = filefind.FindFile(strWildpath);
    while(bContinue)
    {
        bContinue = filefind.FindNextFile();
        /* 注意Microsoft文档对FindNextFile返回值的解释:
         * Nonzero if there are more files; zero if the file found is the last one in the directory or if an error occurred.
        */
        if (filefind.IsDots())
            continue;
        CString strItemText;
        // 根据当前的目录深度在文件名前添加空格,使同一个文件夹下的文件名左端对齐
        for (int i = 0; i <= nDepth; ++i)
            strItemText += L"          ";       
        strItemText += filefind.GetFileName();
        int nItemCount = pList->GetItemCount();
        pList->InsertItem(nItemCount, strItemText);
        if (filefind.IsDirectory())
        {
            CString strSubDir = filefind.GetFilePath();
            TravelFolder(strSubDir, nDepth + 1);
        }
    }
    filefind.Close();
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问