用CFileDialog 打开多个文件,并在ListCtrl中输出文件名(不包括路径),该程序得到的filename有问题,因为在n=filename.ReverseFind('\\')返回结果是-1,就是没找到,比较纳闷,请帮我解答一下,错在哪儿?先谢了CFileDialog dlg(TRUE,_T("*.txt"),NULL,OFN_HIDEREADONLY
| OFN_ALLOWMULTISELECT,_T("file (*.txt|*.txt||"),this);
int nOkCancel = dlg.DoModal();
CString filename;
TCHAR *pBuffer = new TCHAR[MAX_PATH * 100];//最多允许100个文件
dlg.m_ofn.lpstrFile = pBuffer;
dlg.m_ofn.nMaxFile = 100*MAX_PATH;
dlg.m_ofn.lStructSize = 88; if(nOkCancel == IDOK)
{
filename=dlg.GetFileName ();/////////////////
POSITION pos = dlg.GetStartPosition();
while(pos != NULL)
{
filename=dlg.GetNextPathName (pos);
// 转换为不含路径的文件名
int n=0;
n=filename.ReverseFind('\\');
CString str;
str.Format(_T("第%d层"), n);
AfxMessageBox(str);
filename=filename.Right(filename.GetLength()-n-1); 
////////////////////////////////////
int nItem=m_list1.GetItemCount ();
m_list1.InsertItem (nItem,filename);
} }

解决方案 »

  1.   

    TCHAR *pBuffer = new TCHAR[MAX_PATH * 100];//最多允许100个文件
    memset(pBuffer,0,MAX_PATH*100);同时别忘了,用完了之后delete[] pBuffer
      

  2.   

    采用了jimoguilai的方法,n=filename.ReverseFind('\\')得到的n还是-1,
    filename是空白,还是有问题。
      

  3.   

    TCHAR  *pBuffer  =  new  TCHAR[MAX_PATH  *  100];//最多允许100个文件  
               dlg.m_ofn.lpstrFile  =  pBuffer;  
               dlg.m_ofn.nMaxFile  =  100*MAX_PATH;  
               dlg.m_ofn.lStructSize  =  88;  
    这些都是废代码而且有错误,删掉。
      

  4.   

    dlg.m_ofn.lpstrFile = pBuffer;这一行出的问题
    lpstrFile 中保存的是对话框打开文件的路径
    你这样赋值就把那个路径删除了
    注释掉就可以
      

  5.   

    那就奇怪了,我在我这是了,好着呢
    能得到filename,呵呵
    你在找找看吧
      

  6.   

    哦,忘了
    我这可以,我把DoModal()位置调了一下
    CString filename;
    TCHAR *pBuffer = new TCHAR[MAX_PATH * 100];//最多允许100个文件
    memset(pBuffer,0,MAX_PATH*100);
    dlg.m_ofn.lpstrFile = pBuffer;
    dlg.m_ofn.nMaxFile = 100*MAX_PATH;
    dlg.m_ofn.lStructSize = 88;
    int nOkCancel = dlg.DoModal();
    if(nOkCancel == IDOK)
      

  7.   


    filename=dlg.GetFileName ();/////////////////
    POSITION pos = dlg.GetStartPosition();
    filename=dlg.GetFileName ();/////////////////   这句没用,去掉看看。方法正确,你单步调试看看。
      

  8.   

    问题解决了  用的是Mackz(在相互)的方法
    非常谢谢jimoguilai反复帮忙调试
    zaodt的建议也不错
    分数少,只能意思一下了,谢谢诸位