在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 属性设置不对,还是其他原因,希望牛人指点
CStdioFile File;
File.Open(str1, CFile::modeRead|CFile::shareDenyNone|CFile::modeNoTruncate)在CView中通过一个for循环去调用自己建的类CDVH的函数ExtractData;
for循环执行的第一次,File.Open可以打开文件,但是for循环执行的第二次的时候,文件就不能打开,是CStdioFile 属性设置不对,还是其他原因,希望牛人指点
解决方案 »
- DetourCreateProcessWithDll 的参数 C:\\windows\\notepad.exe 是什么意思,好难明白,附代码!!!谢999辈子
- 请教通过代理服务器下载的问题?
- strSQL.Format,,,请问这一句有错吗?谢谢,一定给分!!
- 初学VC++,希望哪位高手给我一个记事本源码
- 单文档多视图 的文档新建问题
- 请问如何正确显示unicode字符
- 请教微软专家:ATL项目中用CreateThread好,还是_beginthreadex好?
- 哪位大侠能给一个游戏地图编辑器的源码?多谢了!!
- 请问怎样实时打印,即在打印机实际打出一页时才发送下一页的内容?
- 如何编写一个集成Ms Word的控件,能够处理WEB上的文件排版
- 关于垂直同步的问题
- 关于视频文件读入的问题请教
CFileException ex;
if (!file.Open(m_strExcuteSql,
CFile::modeRead|CFile::shareDenyNone|CFile::modeNoTruncate,
&ex))
{
ex.ReportError(MB_ICONERROR);
return ;
}
文件只能打开一次,关闭一次,再打开,关闭...
你的问题大概是for不停的打开,没关闭
{
CStdioFile File;
File.Open(str1, CFile::modeRead|CFile::shareDenyNone|CFile::modeNoTruncate)
.....
File.Close();
}
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就打不开了 ,大家看一下