文件对话框

来源:互联网 发布:群众 知乎 编辑:程序博客网 时间:2024/06/09 18:57

一、保存文件

switch(m_SaveTypes)
{
case 1:
m_name+=_T("单向模块V2.9测试结果.xls");
officeExtendedName=_T("Excel文件|*.xls*||");
break;
case 2:
m_name+=_T("单向模块V2.9测试结果.xlsx");
officeExtendedName=_T("Excel文件|*.xlsx*||");
break;
case 3:
m_name+=_T("单向模块V2.9测试结果.txt");
officeExtendedName=_T("Excel文件|*.txt*||");
break;
default:
KillTimer(WM_TIMER3);
RichEditShow(true,_T("保存格式错误!"),true);
m_SaveExcelFlag=false;
return false;
}

CFileDialog mFileDlg(false, 
NULL,
m_name,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
officeExtendedName,
AfxGetMainWnd()
);

if(mFileDlg.DoModal() == IDOK)

{

//操作

m_StrFilePath = mFileDlg.GetPathName(); //返回选定文件的完整路径

......

}


//保存方案按钮
void CSetSchemeDlg::OnOK() 
{
// TODO: Add extra validation here
CString strFilePathName;
CString strFileName;
char chSpace = '\t';

int iCount = m_setSchemeList.GetItemCount();
if (0 == iCount)
{
return;
}

CString sz="MyType Files (*.scheme)|*.scheme||";
CFileDialog dlg(FALSE,".scheme",NULL,OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,sz,this);
if (IDOK == dlg.DoModal())
{
strFilePathName = dlg.GetPathName();

CFile mFile;
mFile.Open(strFilePathName,CFile::modeCreate | CFile::modeNoTruncate| CFile::modeWrite);

CString strSum ;
CString strTemp;
int iLen = 0;
for (int i=0;i<iCount;i++)
{
strSum = "";


strTemp = m_setSchemeList.GetItemText(i,2);//动作
//给数据加密
StringOpr::StringEncrypt(strTemp);
strSum += strTemp;
//加分隔符
strSum += chSpace;//'\t'


strTemp = m_setSchemeList.GetItemText(i,3);//数据标识
//给数据加密
StringOpr::StringEncrypt(strTemp);
strSum += strTemp;
//加分隔符
strSum += chSpace;//'\t'


strTemp = m_setSchemeList.GetItemText(i,4);//次数
//给数据加密
StringOpr::StringEncrypt(strTemp);
strSum += strTemp;

//加分隔符
strSum += chSpace;//'\t'
strTemp = m_setSchemeList.GetItemText(i,5);//设定数据
//给数据加密
StringOpr::StringEncrypt(strTemp);
strSum += strTemp;



strSum += "\r\n";
iLen = strSum.GetLength();
mFile.Write(strSum,iLen);

}
mFile.Flush();
mFile.Close();
}
// ClxDialog::OnOK();
}



二、打开文件

CFileDialog mFileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("HEX文件|*.hex*||"), AfxGetMainWnd());
if(mFileDlg.DoModal() == IDOK)
{
m_StrUpdateFilePath = mFileDlg.GetPathName(); 
m_isHexFile=true;


m_StrResult.Empty();
GetLocalTime(&CurrTime);
StrCTime.Format(_T("[%4d-%02d-%02d %02d:%02d:%02d]>>"),CurrTime.wYear,CurrTime.wMonth,CurrTime.wDay,CurrTime.wHour,CurrTime.wMinute,CurrTime.wSecond);
m_StrResult += StrCTime;
m_StrResult += _T("文件载入成功!\r\n");
m_Result.LineScroll(m_Result.GetLineCount());
m_Result.SetSel(m_Result.GetTextLength(),m_Result.GetTextLength());
m_Result.ReplaceSel(m_StrResult);
s.Format(_T("Number of Lines: %d"),m_Result.GetLineCount()-1);
s1.Format(_T("已就绪"));
m_bar.SetPaneText(0,s);
m_bar.SetPaneText(1,s1);
}


//导入方案
void CExeSchemeDlg::OnGuideSchemeBut() 
{
//需输入密码
CPasswordDlg *passwordDlg = new CPasswordDlg(this);
if (IDCANCEL == passwordDlg->DoModal())
{
delete passwordDlg;
return;
}
delete passwordDlg;


//如果表格中有数据先请空
// if (0 != m_exeSchemeList.GetItemCount())
// {
// m_exeSchemeList.DeleteAllItems();
// }


// TODO: Add your control notification handler code here
CString strFilePathName;
CString strFileName;

CString sz="MyType Files (*.scheme)|*.scheme||";
CFileDialog dlg(TRUE,".scheme",NULL,OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,sz,this);

if (IDOK == dlg.DoModal())
{


strFilePathName = dlg.GetPathName();
strFileName = dlg.GetFileTitle();
SetDlgItemText(IDC_FILE_NAME_STA,strFileName);
CStdioFile   file;   
file.Open(strFilePathName,CFile::modeRead); 

//如果表格中有数据先请空
// if (0 != m_exeSchemeList.GetItemCount())
// {
// m_exeSchemeList.DeleteAllItems();
// }

CString strIndex;
CString strTemp;
CString strAction;
CString strCode;
CString strExeTime;
CString strData;
int iLeftCount = 0;

int   iLen = 0;
// int  m_The_4th_Addendum=0;


//每次导入都是否覆盖有的数据
iLen = m_exeSchemeList.GetItemCount();
if(iLen)
{
if(AfxMessageBox("是否覆盖原有项?",MB_YESNO | MB_ICONQUESTION)==IDYES)
{
m_exeSchemeList.DeleteAllItems();
iLen=0;
}
}




while(file.ReadString(strTemp)>0)   
{   

strAction = strTemp.Left(strTemp.Find('\t'));
strTemp = strTemp.Mid(strAction.GetLength()+1);
StringOpr::StringEncrypt(strAction, FALSE);//解密,动作


strCode = strTemp.Left(strTemp.Find('\t'));
StringOpr::StringEncrypt(strCode, FALSE);//解密,数据标识
strTemp = strTemp.Mid(strCode.GetLength()+1);

strExeTime = strTemp.Left(strTemp.Find('\t'));
StringOpr::StringEncrypt(strExeTime, FALSE);//解密,次数
strTemp = strTemp.Mid(strExeTime.GetLength()+1);

strData = strTemp;
StringOpr::StringEncrypt(strData, FALSE);//解密,设定数据


//strData.Remove(' ');

//strPath = strPath.Left(strPath.ReverseFind('\\'));


if(strAction=="4号补遗 ")
{
m_exeSchemeList.InsertItem(iLen,"");
strIndex.Format("%d", iLen+1);
m_exeSchemeList.SetItemText(iLen,1,strIndex);
m_exeSchemeList.SetItemText(iLen,2,"主动上报:修改抄控器台区编号");//不可动
m_exeSchemeList.SetItemText(iLen,3,"");
m_exeSchemeList.SetItemText(iLen,4,strExeTime);
m_exeSchemeList.SetItemText(iLen,5,"");
iLen++;




m_exeSchemeList.InsertItem(iLen,"");
strIndex.Format("%d", iLen+1);
m_exeSchemeList.SetItemText(iLen,1,strIndex);
m_exeSchemeList.SetItemText(iLen,2,"主动上报:启动事件上报");
m_exeSchemeList.SetItemText(iLen,3,"");
m_exeSchemeList.SetItemText(iLen,4,"");
m_exeSchemeList.SetItemText(iLen,5,"");
iLen++;


m_exeSchemeList.InsertItem(iLen,"");
strIndex.Format("%d", iLen+1);
m_exeSchemeList.SetItemText(iLen,1,strIndex);
m_exeSchemeList.SetItemText(iLen,2,"主动上报:等待接收主动上报数据");
m_exeSchemeList.SetItemText(iLen,3,"");
m_exeSchemeList.SetItemText(iLen,4,"");
m_exeSchemeList.SetItemText(iLen,5,"");
iLen++;


m_exeSchemeList.InsertItem(iLen,"");
strIndex.Format("%d", iLen+1);
m_exeSchemeList.SetItemText(iLen,1,strIndex);
m_exeSchemeList.SetItemText(iLen,2,"主动上报:下发复位主动上报状态字命令");
m_exeSchemeList.SetItemText(iLen,3,"");
m_exeSchemeList.SetItemText(iLen,4,"");
m_exeSchemeList.SetItemText(iLen,5,"");
iLen++;


m_exeSchemeList.InsertItem(iLen,"");
strIndex.Format("%d", iLen+1);
m_exeSchemeList.SetItemText(iLen,1,strIndex);
m_exeSchemeList.SetItemText(iLen,2,"主动上报:将抄控器台区编号修改回AAAA");
m_exeSchemeList.SetItemText(iLen,3,"");
m_exeSchemeList.SetItemText(iLen,4,"");
m_exeSchemeList.SetItemText(iLen,5,"");
iLen++;


m_exeSchemeList.InsertItem(iLen,"");
strIndex.Format("%d", iLen+1);
m_exeSchemeList.SetItemText(iLen,1,strIndex);
m_exeSchemeList.SetItemText(iLen,2,"主动上报:设置被测载波模块台区编号");
m_exeSchemeList.SetItemText(iLen,3,"");
m_exeSchemeList.SetItemText(iLen,4,"");
m_exeSchemeList.SetItemText(iLen,5,"");
iLen++;


continue;
}


m_exeSchemeList.InsertItem(iLen,"");
strIndex.Format("%d", iLen+1);
m_exeSchemeList.SetItemText(iLen,1,strIndex);
m_exeSchemeList.SetItemText(iLen,2,strAction);
m_exeSchemeList.SetItemText(iLen,3,strCode);
m_exeSchemeList.SetItemText(iLen,4,strExeTime);
m_exeSchemeList.SetItemText(iLen,5,strData);
iLen++;
}
file.Close();
UpdateData(FALSE);
}


}



三、打开文件

1、HEX文件

CFileException e;
CStdioFile HexFile;

if(!HexFile.Open(m_StrUpdateFilePath,CFile::modeRead,&e))

{

//打开失败

}

CString OneLine;

while(HexFile.ReadString(OneLine))

{

//每次读一行

}

HexFile.Close();//关闭句柄

2、BIN文件

CStdioFile transfile;
CFileException e;
BOOL file;

file = transfile.Open(m_StrUpdateFilePath,CFile::modeRead|CFile::typeBinary);
if(file==false)
{

//打开失败

}


outnum = transfile.Read(outputbuffer,sizeof(outputbuffer)-1);
flength += outnum;
while(outnum)
{
for(int i=0;i<outnum;i++)
{
CString temp;
byte tempbyte;
tempbyte=(0xf0&outputbuffer[i])>>4;
if(tempbyte==0)
temp="0";
else
temp.Format(_T("%X"),tempbyte);
str_programmedata += temp;
tempbyte=0x0f&outputbuffer[i];
if(tempbyte==0)
temp="0";
else
temp.Format(_T("%X"),tempbyte);
str_programmedata += temp;
str_programmedata += " ";
}
outnum = transfile.Read(outputbuffer,sizeof(outputbuffer)-1);
flength += outnum;
}
transfile.Close();


0 0
原创粉丝点击