数据存盘时遇到的问题,double nData[1024],怎么只能存前几个数据?
1024个数的double数组,存盘时前几个数都是对的,后面的全是0,如果数组为int 型就可以了,不知为什么?解决马上给分! 问题点数:0、回复次数:11Top
1 楼MPU(黑眼圈)回复于 2003-06-03 19:50:54 得分 0
你是如何存盘的?Top
2 楼ATField()回复于 2003-06-03 19:52:36 得分 0
注意大小为
1024×sizeof(double)Top
3 楼bcx7810(xiaobi)回复于 2003-06-03 20:27:50 得分 0
存盘是
for (j=0;j<16*1024;j++)
{
fwrite(&m_nData[j],sizeof(double),1,fp);
}
读盘是
for (j=0;j<16*1024;j++)
{
fread(&m_nData[j],sizeof(double),1,fp);
}
读盘时前80个数据都是对的?Top
4 楼serverclient(郁闷)回复于 2003-06-03 21:07:29 得分 0
不用这么麻烦吧。。。
存盘:
fwrite(&m_nData,sizeof(double) * 1024 * 16,1,fp) ;
读取:
fread(&m_nData,sizeof(double) * 1024 * 16,1,fp) ;
不就行了??
或者使用CFile类的WriteHuge和ReadHuge成员函数可能更好!Top
5 楼bcx7810(xiaobi)回复于 2003-06-03 21:22:22 得分 0
我用的就是
fwrite(&m_nData,sizeof(double),16*1024,fp);
fread(&m_nData,sizeof(double),16*1024,fp);
但是读取来的还只有前面几个数,其他都为零?
Top
6 楼serverclient(郁闷)回复于 2003-06-03 21:37:02 得分 0
大哥再仔细看看!!
我的:fwrite(&m_nData,sizeof(double) * 1024 * 16,1,fp) ;
你的:fwrite(&m_nData,sizeof(double),16*1024,fp);
不一样吧??
Top
7 楼lws08()回复于 2003-06-03 22:22:50 得分 0
整个有关读写的程序贴出来看看?Top
8 楼windbells(风铃)回复于 2003-06-03 22:30:28 得分 0
你在读之前是不是没有关闭文件呢?
用下面的程序试试
FILE *fp;
fp=fopen(FilePath,"wb");
double m_nData[1024];
if (fp==NULL)
{
return;
}
try
{
for (j=0;j<1024;j++)
{
fwrite((char *)&m_nData[j],sizeof(double),1,fp);
fflush(fp);
}
}
catch(...)
{
}
fclose(fp);
Top
9 楼blackblue(跌跌撞撞)回复于 2003-06-03 23:06:12 得分 0
fwrite(&m_nData,sizeof(double) * 1024 * 16,1,fp) ;
fread(&m_nData,sizeof(double) * 1024 * 16,1,fp) ;
这两个函数里面&m_nData不对吧。直接用m_nData就行了
fwrite(&m_nData,sizeof(double) * 1024 * 16,1,fp) ;
fwrite(&m_nData,sizeof(double),16*1024,fp);
还有这两种使用方法没什么差别阿,顶多就是文件中double数据的存放格式不一样
Top
10 楼XingXing2004(新星)回复于 2003-06-03 23:24:57 得分 0
我也想学学,我把文件从对话框中输入数据,以保存为文本文件,可是读的时候不对,能帮我分析一下吗?
谢谢!
struct EngDataStruct
{
double ne[100];
double Me[100];
double Ge[100];
double Ne[100];
}EngDataInput[SIZE];
void CETCMDoc::OnEngDataSaveTxt()
{
// TODO: Add your command handler code here
CString str;
CStdioFile file;
CString filename;
m_bEngDataSaveTxt=TRUE;
CFileDialog dlgFile(FALSE,"txt","*.txt");
if(dlgFile.DoModal()==IDOK)
{
filename=dlgFile.GetFileName();
if(file.Open(filename,CFile::modeCreate|CFile::modeWrite|
CFile::typeText)==0)
{
return;
}
else
{
str.Format ("ne Me Ge Ne\n");
file.WriteString(str);
for(int i=0;i<m_sEngInputData.m;i++)
{
// fwrite(&Engdata[i],sizeof(double),1,m_pFile);
EngDataInput[i].ne[i]=m_sEngInputData.m_dEngRotSpeed[i];
EngDataInput[i].Me[i]=m_sEngInputData.m_dEngTorque[i];
EngDataInput[i].Ge[i]=m_sEngInputData.m_dEngInputGe[i];
EngDataInput[i].Ne[i]=m_sEngInputData.m_dEngInputNe[i];
str.Format("%0.2f %0.2f %0.2f %0.2f\n",
EngDataInput[i].ne[i],EngDataInput[i].Me[i],EngDataInput[i].Ge[i],EngDataInput[i].Ne[i] );
file.WriteString (str);
}
file.SetLength(file.GetPosition());
file.Close();
}
str="notepad"+filename;
WinExec(str,SW_SHOW);
}
写,读为fread
void CETCMDoc::OnEngFILEOPEN()
{
// TODO: Add your command handler code here
CFileDialog dlgFile(TRUE,"txt","*.txt");
if(dlgFile.DoModal()==IDOK)
{
FILE *fp;
CString str;
int i=0;
if((fp=fopen(dlgFile.GetPathName(),"rb"))==NULL)
{
return;
}
else
{
fseek(fp,0L,SEEK_SET);
while(!feof(fp))
{
fread(&EngDataInput[i],4*sizeof(double),4,fp);
m_sEngInputData.m_dEngRotSpeed[i]=EngDataInput[i].ne[i];
m_sEngInputData.m_dEngTorque[i]=EngDataInput[i].Me[i] ;
m_sEngInputData.m_dEngInputGe[i]=EngDataInput[i].Ge[i] ;
m_sEngInputData.m_dEngInputNe[i]=EngDataInput[i].Ne[i] ;
str.Format("%0.2f %0.2f %0.2f %0.2f\n",
m_sEngInputData.m_dEngRotSpeed[i],
m_sEngInputData.m_dEngTorque[i],
m_sEngInputData.m_dEngInputGe[i],
m_sEngInputData.m_dEngInputNe[i]);
}
}
fclose(fp);
}
}
Top
11 楼bcx7810(xiaobi)回复于 2003-06-04 17:09:15 得分 0
存盘时
FILE *fp;
if((fp=fopen(pt.HardwareParameterFileName,"w+"))==NULL)
{
AfxMessageBox("不能打开文件!");
return;
}
else
{
fwrite(&pm.m_channelInput,sizeof(int),1,fp);
fwrite(&pm.m_blockLength,sizeof(int),1,fp);
fwrite(&pm.m_dataBlocks,sizeof(int),1,fp);
for (int j=0;j<pm.m_channelInput;j++)
{
OnStringToData(pt.m_projectUnits[j]);
pm.m_saveProjectUnits[j]=pt.m_saveProjectUnit;
fwrite(&pm.m_saveProjectUnits[j],sizeof(int),1,fp);
fwrite(&pm.m_calibrations[j],sizeof(float),1,fp);
}
fwrite(&pm.m_pcZoom,sizeof(float),1,fp);
fwrite(&pm.m_samplingFrequency,sizeof(float),1,fp);
fwrite(&pm.m_voltRange,sizeof(float),1,fp);
fwrite(&pm.m_saveTriggerMode,sizeof(int),1,fp);
fwrite((char *)&m_nData,sizeof(double),16*1024,fp);
fclose(fp);
}
}Top
相关问题
- 数据库存盘
- 数据窗口的内容存盘!!!
- 数据窗口存盘问题??100分!!!
- 关于数据窗口如何存盘?(新手)在线等待!!
- 数据窗口中如何按照显示的列(字段,顺序)数据进行存盘导出?
- 在数据库中,怎样让输入的数据立即存盘!!防止掉电····
- 存盘的问题:我没有对数据窗口中的数据项作出修改,为什么还是提示“数据修改成功”呢?
- 如何让tdbnavigator数据录入后立即物理存盘?快,快,快,帮我一把.
- ClientDataSet1控件更新dbgrid中的数据时,执行applyupdates(-1)为何乱存盘了?
- ORACLE的SQL PLUS下,什么命令/格式 将SELECT出的数据存盘到本地TXT格式文件



