CStdioFile 打开文件的时候出错了、、

huahua4207948 2011-03-21 09:47:43
在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 属性设置不对,还是其他原因,希望牛人指点
...全文
520 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
huahua4207948 2011-03-21
  • 打赏
  • 举报
回复
str1是要打开的文件名
huahua4207948 2011-03-21
  • 打赏
  • 举报
回复
谢谢大家。。。
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就打不开了 ,大家看一下
yinquan8241 2011-03-21
  • 打赏
  • 举报
回复
for(;;;)
{
CStdioFile File;
File.Open(str1, CFile::modeRead|CFile::shareDenyNone|CFile::modeNoTruncate)
.....
File.Close();
}
看不见的裂痕 2011-03-21
  • 打赏
  • 举报
回复
上代码,应该是没关闭的问题.
Eleven 2011-03-21
  • 打赏
  • 举报
回复
你的代码里怎么写的呢?
qiuxin425 2011-03-21
  • 打赏
  • 举报
回复
str1 是什么?
踏实每一步 2011-03-21
  • 打赏
  • 举报
回复
打开后,就在for循环里面读文件。
文件只能打开一次,关闭一次,再打开,关闭...
你的问题大概是for不停的打开,没关闭
King_hhuang 2011-03-21
  • 打赏
  • 举报
回复
不用每次都打开的,如果你要每次打开,要记得每次都关闭File.Close();
zyq5945 2011-03-21
  • 打赏
  • 举报
回复
	CStdioFile file;
CFileException ex;
if (!file.Open(m_strExcuteSql,
CFile::modeRead|CFile::shareDenyNone|CFile::modeNoTruncate,
&ex))
{
ex.ReportError(MB_ICONERROR);
return ;
}

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧