处理过程分:
设置打开文件对话框;
获取要打开文件的路径;
根据打开路径打开文件;
将文件内容取出后保存到CString;
处理取出的文件。
void COperationDlg::OnBnClickedBtnOpeLoad()
{
// TODO: Add your control notification handler code here
CString sFilePath;
// 打开文件对话框样式设置
CFileDialog FileOpenDialog(TRUE);
FileOpenDialog.m_ofn.Flags = OFN_ENABLEHOOK|OFN_EXPLORER;
CString strFilter;
strFilter = _T("TXT");
strFilter += (TCHAR)'\0';
strFilter += _T("*.txt");
strFilter += (TCHAR)'\0';
CString allFilter;
VERIFY(allFilter.LoadString(AFX_IDS_ALLFILTER));
strFilter += allFilter;
strFilter += (TCHAR)'\0';
strFilter += _T("*.*");
strFilter += (TCHAR)'\0';
FileOpenDialog.m_ofn.lpstrFilter = strFilter;
FileOpenDialog.m_ofn.lpstrTitle = "Download Filename...";
// Set up the default to match a file that is open.....
CString sFileName;
sFileName.Empty();
if ((((CMDIFrameWnd *) AfxGetMainWnd())->MDIGetActive()) != NULL)
sFileName = (((CMDIFrameWnd *) AfxGetMainWnd())->MDIGetActive())->GetActiveDocument()->GetTitle();
if (!sFileName.IsEmpty())
{
if (sFileName.Find('.') != -1)
sFileName = sFileName.Left(sFileName.Find('.'));
sFileName += _T(".hex");
strcpy(FileOpenDialog.m_ofn.lpstrFile,LPCTSTR(sFileName));
}
// 选择要打开的文件后
BOOL bResult = FileOpenDialog.DoModal() == IDOK ? TRUE : FALSE;
if (bResult)
sFilePath = FileOpenDialog.GetPathName(); // 获取要打开文件的路径
else
AfxMessageBox("Can't find the file");
// 打开文件取出里面的数据存入字符串buffer
// 获取文件大小
HANDLE fileHand;
DWORD fileSize;
fileHand = CreateFile(sFilePath,0,0,0,OPEN_EXISTING,0,0);
fileSize = GetFileSize(fileHand,0);
// 读取文件
char * bufFile = new char [fileSize]; // 文件读取buffer
CFile file;
file.Open(sFilePath,CFile::modeRead);
file.Read(bufFile,fileSize);
// 将文件内容存入字符串
CString sFile;
sFile = bufFile;
// 对从文件获得的字符串数据进行处理
CString sFind = "\r\n";
int StartPos = 0; // 每次查找回车键起始位置
int EndPos = 0; // 每次找到回车键的位置
int cNum = 0; // 每行字符个数
int enterkeyNum = 0; // 文件中回车键的个数
// 获取回车键总个数
while((EndPos=sFile.Find(sFind,StartPos)) != -1)
{
StartPos = EndPos+2;
enterkeyNum ++;
}
CString* sEdit = new CString [enterkeyNum]; // parameter各编辑框字符串buffer
StartPos = 0;
EndPos = 0;
if (enterkeyNum < 15) // 参数小于15个
{
AfxMessageBox("The number of parameter is insufficient");
}
else
{
if (enterkeyNum == 15) // 最后一个参数后没有带回车键
{
for (int j=0; j<16; j++)
{
EndPos = sFile.Find(sFind,StartPos);
cNum = EndPos - StartPos;
unsigned char * cEdit = new unsigned char[cNum];
for (int i=0; i<cNum; i++)
{
cEdit[i] = sFile[(StartPos+i)];
}
sEdit[j] = cEdit;
StartPos = EndPos+2;
delete[] cEdit;
}
}
else // 最会一个参数后带回车键(可带多个)
{
for (int j=0; j<enterkeyNum; j++)
{
EndPos = sFile.Find(sFind,StartPos);
cNum = EndPos - StartPos;
unsigned char * cEdit = new unsigned char[cNum];
for (int i=0; i<cNum; i++)
{
cEdit[i] = sFile[(StartPos+i)];
}
sEdit[j] = cEdit;
StartPos = EndPos+2;
delete[] cEdit;
}
}
}
// 处理好后的字符串分别赋值给给个编辑框
sPITem_write = sEdit[0];
sInidenTem_write = sEdit[1];
sInidenTim_write = sEdit[2];
sDenTem_write = sEdit[3];
sDenTim_write = sEdit[4];
sAnnTem_write = sEdit[5];
sAnnTim_write = sEdit[6];
sCycle = sEdit[7];
sExtTem_write = sEdit[8];
sExtTim_write = sEdit[9];
sHoldTem_write = sEdit[10];
sHoldTim_write = sEdit[11];
sKP = sEdit[12];
sKI = sEdit[13];
sKD = sEdit[14];
sKL = sEdit[15];
SetDlgItemTextA(IDC_EDIT_OPE_PITEM,sPITem_write);
SetDlgItemTextA(IDC_EDIT_OPE_DENTEM,sInidenTem_write);
SetDlgItemTextA(IDC_EDIT_OPE_DENTIME,sInidenTim_write);
SetDlgItemTextA(IDC_EDIT_OPE_DENINGTEM,sDenTem_write);
SetDlgItemTextA(IDC_EDIT_OPE_DENINGTIME,sDenTim_write);
SetDlgItemTextA(IDC_EDIT_OPE_ANNTEM,sAnnTem_write);
SetDlgItemTextA(IDC_EDIT_OPE_ANNTIME,sAnnTim_write);
SetDlgItemTextA(IDC_EDIT_OPE_ANNCYCLE,sCycle);
SetDlgItemTextA(IDC_EDIT_OPE_EXTTEM,sExtTem_write);
SetDlgItemTextA(IDC_EDIT_OPE_EXTTIME,sExtTim_write);
SetDlgItemTextA(IDC_EDIT_OPE_HOLDTEM,sHoldTem_write);
SetDlgItemTextA(IDC_EDIT_OPE_HOLDTIME,sHoldTim_write);
SetDlgItemTextA(IDC_EDIT_OPE_KP,sKP);
SetDlgItemTextA(IDC_EDIT_OPE_KI,sKI);
SetDlgItemTextA(IDC_EDIT_OPE_KD,sKD);
SetDlgItemTextA(IDC_EDIT_OPE_KL,sKL);
}