继续请教,继续等
写段程序,选择一个文件夹,并且处理该文件夹里面的所有相应的文件,把得到的数值输出到EXCEL。
程序运行后,我选择一个文件夹,该文件夹里面大概有2000个需要处理的文件。程序处理500多个文件后就出错退出了。调试时显示“Access Violation”。当文件夹里面的文件少于500个时,程序正常运行。如果我把需要处理的文件名改短之后,程序能够处理的文件数量明显增多。
请教大家怎么看这个问题?有什么解决方法?万分火急,十分感谢。
主要代码如下:
CString path;
BROWSEINFO bi;
ZeroMemory(&bi,sizeof(BROWSEINFO));
bi.hwndOwner=GetSafeHwnd();
bi.lpszTitle="请选择ROH数据文件夹 ";
bi.ulFlags=BIF_RETURNONLYFSDIRS;
LPITEMIDLIST pidl=SHBrowseForFolder(&bi);
if(pidl == NULL)
{
return;
}
SHGetPathFromIDList(pidl,path.GetBuffer(10000));
path.ReleaseBuffer();
if(path[path.GetLength()-1] != '\\')
{
path+="\\*.roh";
}
else
{
path+="*.roh";
}
//启动EXCEL服务器,设置初始属性
........
........
int index1=0,x=0;//寻找文件数量统计
CFileFind find;
CString sPath="";
if(find.FindFile(path))
{
while(find.FindNextFile())
{
sPath=find.GetFilePath();//每次循环都得到下一个文件路径
FILE *fd=fopen(sPath,"rb");
float buf[2056];
fread(buf,sizeof(buf[0]),2056,fd);//读取二进制文件,放到buf数组中
float xbuf[2034];
float ybuf[2034];
for (int j=0;j<2034;j++)
{
xbuf[j]=buf[1]+buf[2]*j+buf[3]*j*j+buf[4]*j*j*j+buf[5]*j*j*j*j;//算出xbuf和ybuf
ybuf[j]=buf[j+19];
}
if (0!=m_Wavelength1)//m_Wavelength1,m_Element1,m_Slaver1由用户输入
{
if (m_Slaver1=1&&xbuf[1]>170&&xbuf[1]<174)
{
for (int k=0;k<2034;k++)
{
if ( fabs(xbuf[k]-m_Wavelength1) < 0.001)
{
x=++index1;
range.SetItem(_variant_t((long)(x+2)),_variant_t((long)2),_variant_t(ybuf[k]));
break;
}
}
}
}
}
}