MFC记录式文件的读写

来源:互联网 发布:java 垃圾回收面试题 编辑:程序博客网 时间:2024/06/04 19:30

//创建

dataFileTemp.Open(strPathTemp,CFile::modeCreate|CFile::modeWrite);
dataFileTemp.SeekToBegin();

//关闭

dataFileTemp.Close();
//打开

if(dataFileTemp.Open(strPathTemp,CFile::modeWrite))
   {
    dataFileTemp.SeekToEnd();

   //写入
    dataFileTemp.Write(&g_TestDatas, sizeof(g_TestDatas));
    dataFileTemp.Close();
   }

//删除

 dataFileTemp.Remove(strPathTemp);

*******************************************************定位读写****************************************************

typedef struct tagTestDatas
{
 tagTestDatas()
 {
  dTemperature = 0;
  dHumidity = 0;
  dEnvHumidity = 0;
  dFlowRate = 0;
  dOxyAD = 0;

  dOTR = 0;
  dppm = 0;
  dtime = 0;
  dValtage = 0;
  dVsteam = 0;
  dZeroppm = 0;
 }

double dTemperature;
 double dHumidity;//上腔湿度
 double dEnvHumidity;//环境湿度
 double dFlowRate;
 double dOxyAD;
 double dOTR;
 double dppm;

 double dtime;
 double dValtage;
 double dVsteam;
 double dZeroppm;
 double dStandardOTR;;
} TESTDATAS;

//

void CDetailedDataDlg::OnBnClickedButton1()
{

DOUBLE    dvalue = 0;
 CString     strText;
 TESTDATAS data;
 CFile dataFile;
 dataFile.Open(strFileNameCur,CFile::modeRead);
 int nRecord =  dataFile.GetLength()/sizeof(data);

int i=0;
 //重新定位
  
  int CurRecNum;
  int CurRec;
  int totalRec=0;
  if(nRecord % 1000!=0)
   totalRec=nRecord / 1000+1;
  else
   totalRec=nRecord / 1000;

if (m_RecordNum/sizeof(data)==nRecord)
  {
          CurRecNum=m_RecordNum-(1000+nRecord % 1000)*sizeof(data);
     GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
          CurRec=totalRec-1;
  }
  else

 {
   CurRecNum=m_RecordNum-2000*sizeof(data);
   if (CurRecNum==0)
   {
             GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
      CurRec=1;
   }
   else
   {
     CurRec=CurRecNum/sizeof(data)/1000+1;
   }
  }

//文件绝对定位

dataFile.Seek(CurRecNum,CFile::begin);
  CString strRec;
  strRec.Format(_T("%d/%d"),CurRec,totalRec);
  if (CurRec==1)
  {
    GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
  }

GetDlgItem(IDC_STATIC1)->SetWindowText(strRec);

  m_RecordNum=CurRecNum+1000*sizeof(data);
  int j=CurRecNum/sizeof(data);
  //下一页可用
  GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
  m_DataList.DeleteAllItems();

for(i=0; i<1000; i++)
  { 
   dataFile.Read(&data,sizeof(data));
           j++;
   strText.Format(_T("%d"), j);
   m_DataList.InsertItem(i, strText);

  dvalue = data.dTemperature;  
   strText.Format(_T("%.1f"),dvalue);
   m_DataList.SetItemText(i, 1, strText);

 }
 dataFile.Close();

 UpdateData(FALSE);
}

 

 

 

原创粉丝点击