nFile=0;

CFileDialog dlg(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT); if( dlg.DoModal() == IDOK )
{
POSITION position=dlg.GetStartPosition(); //获取选择的文件个数 while( position )
{
if( nFile>1 ) break;
nFile++;
}
}

解决方案 »

  1.   

    编译没有任何错误,就是运行的时候出错。这段代码的本意是这样:我要打开若干文件,并将路径名加文件名存于strFileName[3]中,因为数组只有三个成员,所以就是这样:int nFile=0; 
    CFileDialog dlg(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT); 
    if( dlg.DoModal() == IDOK ) 

    POSITION position=dlg.GetStartPosition(); 
    while( position ) 
    {
    strFileName[nFile++]=dlg.GetNextPathName(position);
    if( nFile>2 ) break;
    }但是,就是这段代码,编译无错,运行时,一旦选3个以上的文件,就错误,好像这个break语句并没起作用。
      

  2.   

    你给的代码,我试了下,没有你说的问题啊..void CTestDlg1Dlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    CString strFileName[3];
    int nFile=0; 
    CFileDialog dlg(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT); 
    if( dlg.DoModal() == IDOK ) 

    POSITION position=dlg.GetStartPosition(); 
    while( position ) 

    strFileName[nFile++]=dlg.GetNextPathName(position); 
    if( nFile>2 ) break; 

    }
    }
      

  3.   

    如果把if( nFile>2 ) break; 去掉,就没有问题,但是我不明白这之间有什么关系。如果是我系统或机器不好吧,新建工程又没问题,太奇怪了。
      

  4.   

    试了一下,这样就没问题了: while( position )
    {
    if( nFile<3 )
    {
    strFileName[nFile]=dlg.GetNextPathName( position );
    } else
    {
    dlg.GetNextPathName( position );
    } nFile++;
    }
      

  5.   

    if( dlg.DoModal() == IDOK )
    返回的button id你确认是IDOK吗,很奇怪
      

  6.   

    执行到哪行出错?是不是strFileName越界了?
      

  7.   

    看样子,就是strFileName越界,但问题是我加了控制语句了,罢了,反正已经解决了,不想了。
      

  8.   

    if( nFile <3 ) 

    strFileName[nFile]=dlg.GetNextPathName( position ); 
    --------------------------------------
    从你上述代码成功来看,问题很明显是strFileName越界!
      

  9.   

                if( nFile>2 ) break;
                strFileName[nFile++]=dlg.GetNextPathName(position); 
    仔细想想逻辑。
      

  10.   

    问题就两个字:越界;狗尾续貂下:
    if( dlg.DoModal() == IDOK ) 
        { 
            POSITION position=dlg.GetStartPosition(); 
            while( nFile<3) 
            { 
                strFileName[nFile++]=dlg.GetNextPathName(position);             
            } 
        }