在MFC中建一个单文档的工程,在CView中调用自己建的一个类CDVH中函数ExtractData,在自己的类中的函数ExtractData建了一个这样的类CStdioFile File打开一个文件
CStdioFile File;
File.Open(str1, CFile::modeRead|CFile::shareDenyNone|CFile::modeNoTruncate)在CView中通过一个for循环去调用自己建的类CDVH的函数ExtractData;
for循环执行的第一次,File.Open可以打开文件,但是for循环执行的第二次的时候,文件就不能打开,是CStdioFile 属性设置不对,还是其他原因,希望牛人指点

解决方案 »

  1.   

    CStdioFile file;
    CFileException ex;
    if (!file.Open(m_strExcuteSql,
    CFile::modeRead|CFile::shareDenyNone|CFile::modeNoTruncate, 
    &ex))
    {
    ex.ReportError(MB_ICONERROR);
    return ;
    }
      

  2.   

    不用每次都打开的,如果你要每次打开,要记得每次都关闭File.Close();
      

  3.   

    打开后,就在for循环里面读文件。
    文件只能打开一次,关闭一次,再打开,关闭...
    你的问题大概是for不停的打开,没关闭
      

  4.   

    for(;;;)
    {
      CStdioFile File;
      File.Open(str1, CFile::modeRead|CFile::shareDenyNone|CFile::modeNoTruncate)
       .....
      File.Close();
    }
      

  5.   

    谢谢大家
    CView中函数大致是这样的,
    for(int j=0;j<3;j++)
    {
         dvh->ExtractData(minRow[j],maxRow[j],minColumn[j],maxColu[j],pstr,NumDoselevel);
    }
    CDVH中的ExtractData函数,
    void CDVH::ExtractData(int minRow, int maxRow, int minColumn, int maxColumn,LPCTSTR pstr,int NumDoselevel)
    {
    int m=0,n=0;
    CString str1;
        nNumofDose=NumDoselevel;
    CFileFind finder;
    CString strWildcard(pstr);
    strWildcard += _T("*.grd");
        BOOL bWorking = finder.FindFile(strWildcard);   while (bWorking)
       {
          bWorking = finder.FindNextFile();      // skip . and .. files; otherwise, we'd
          // recur infinitely!      if (finder.IsDots())
             continue;      // if it's a directory, recursively search it      
          
              str1 = finder.GetFilePath();
     //        cout << (LPCTSTR) str << endl;
    //         Recurse(str);
    //      
          
    CStdioFile File;
    CString str,result;
    CFileException e;
    float b; 
    int i=0,j;
    if(!File.Open(str1,CFile::modeRead|CFile::shareDenyNone|CFile::modeNoTruncate))
    {
    e.ReportError();
    // e.ErrnoToException();
    return;
    }
     // printf("open file false");
     j=0;
     while(File.ReadString(str)&&j<5)
     {
     j++;
     if(j==1&&str!="DSAA")     
     AfxMessageBox("文件格式不对");
     if(j==2&&str!="512 512")   
     AfxMessageBox("文件数据格式不对");
     }  j=0;
     for(m=minRow;m<maxRow;m++)
     {
    while(File.ReadString(str))//while循环读取每一行字符
    {
    ++j;
    if(j==(m+5))  
    break;
    }

    for(n=minColumn;n<maxColumn;n++)
    {
    int count1=0;  result="";
    for( i=0;   i <str.GetLength()&&count1!=(n-1);   i++) 
    {
    if(str[i]==' ') 
    count1++;
    }
         
    if(n==1)
    i=i+1; while(str[i]!=' ') 
    {
    result+=str[i]; 
    i++;
    } float min=0.000000;
    float max=3.550000;
    float   a=0.035500;
    result=_T(result);
    b = atof(result); 
       
       if((min<b)&&(max>b))
       {//printf("%f  ",b);
       TotalNum++ ; 
       } for(int k=0;k<nNumofDose;k++)
    {
      if(((0+k*a)<b)&&((a+k*a)>b))
      nDoseCount[k]++;
    }
    }
    }
     File.Close();
    }
      
    finder.Close();
    }
    函数ExtractData的功能是实现打开一个指定的文件夹下的在所有*。grd文件中指定行和列的区域内统计0到3.55的数,(*。grd文件一共有512*512个数,行512 列512),因为要在多个区域统计,所以要通过for循环,执行多次ExtractData来改变区域的行和列,循环每执行一次,统计一个区域的,文件在函数ExtractData末尾都关闭了,文件应该在每次循环执行是打开后都关闭了。但是现在for循环执行第一次可以,但是第二次File.Open就打不开了 ,大家看一下