MFC从多个EDIT中读取和保存文件

在网上查了蛮多自资料,但各种都是复制粘贴的,很多都不太能用,然后许多又和自己想要的不太一样,摸索了一下,索性自己总结了一下:

下面的程序功能是:自己打开保存路径,输入保存的文件名字,然后保存多个editcontrol控件的内容,每个内容用换行符隔开

void CNewSetDlg::OnBnClickedParaSaveButton()
{
	// TODO: Add your control notification handler code here
	CString str;
	CFileDialog fg(false,_T("*.txt"),NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
		_T("Text File(*.txt)|*.txt|Excel CSV File(*.csv)|All File(*.*)|*.*||"),NULL);
	if (fg.DoModal()==IDOK)
	{
		CString filename=fg.GetPathName();
		CStdioFile mFile(filename,CFile::modeCreate|CFile::modeWrite);
		GetDlgItemText(IDC_JOINT_NUM_EDIT,str);
		mFile.WriteString(str+"\n");
		
		GetDlgItemText(IDC_THETA_EDIT,str);
		mFile.WriteString(str+"\n");

		GetDlgItemText(IDC_ALPHA_EDIT,str);
		mFile.WriteString(str+"\n");

		GetDlgItemText(IDC_A_EDIT,str);
		mFile.WriteString(str+"\n");

		GetDlgItemText(IDC_D_EDIT,str);
		mFile.WriteString(str+"\n");

		mFile.Close();
		
	}

}
下面的程序是读出数据分别到原来的editcontrol控件中显示出来:

void CNewSetDlg::OnBnClickedParaInputButton()
{
	// TODO: Add your control notification handler code here
	CString str;
	CString filename;
	CFileDialog fg(TRUE,_T("*.txt"),NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
		_T("Text File(*.txt)|*.txt|Excel CSV File(*.csv)|All File(*.*)|*.*||"),NULL);
	if(fg.DoModal())
		filename=fg.GetPathName();
	CStdioFile mFile(filename,CFile::modeRead);
	BOOL ReadString(CString &str);

	while(mFile.ReadString(str))
	{
		//mFile.Seek(0,CFile::begin);
		//mFile.ReadString(str);
		SetDlgItemText(IDC_JOINT_NUM_EDIT,str);
		//mFile.ReadString(str2);
		//SetDlgItemText(IDC_THETA_EDIT,str);
		//mFile.ReadString(str3);
		//SetDlgItemText(IDC_ALPHA_EDIT,str);
		//mFile.ReadString(str4);
		//SetDlgItemText(IDC_A_EDIT,str);
		//mFile.ReadString(str5);
		//SetDlgItemText(IDC_D_EDIT,str);
	}
	
	UpdateData(FALSE);
	mFile.Close();
}



在使用`file.read()`读取文本文件后,如果在MFCEdit控件出现了乱码,可能是因为读取文件编码格式与Edit控件的编码格式不一致导致的。 一种解决方法是将读取的文本文件转换成Edit控件的编码格式再输出。以下是一个示例代码,假设Edit控件为m_Edit,要输出的文件为filename: ```cpp // 打开文件 CFile file; if (!file.Open(filename, CFile::modeRead | CFile::typeBinary)) { return; } // 获取文件大小 int nLength = (int)file.GetLength(); // 读取文件内容 char* buffer = new char[nLength]; file.Read(buffer, nLength); // 关闭文件 file.Close(); // 获取Edit控件的编码格式 UINT nCodePage = m_Edit.GetFont()->GetCodePage(); // 将文件内容转换成Edit控件的编码格式 int nWideCharLen = MultiByteToWideChar(CP_ACP, 0, buffer, nLength, NULL, 0); WCHAR* pwszUnicode = new WCHAR[nWideCharLen + 1]; MultiByteToWideChar(CP_ACP, 0, buffer, nLength, pwszUnicode, nWideCharLen); pwszUnicode[nWideCharLen] = 0; // 将内容输出到Edit控件 m_Edit.SetWindowTextW(pwszUnicode); // 释放内存 delete[] buffer; delete[] pwszUnicode; ``` 其,上述代码,CP_ACP表示系统默认的编码格式,可以根据需要替换成其他编码格式。`MultiByteToWideChar()`函数将文本文件内容从多字节转换为宽字节,以便在Edit控件显示。注意,最后还需要在转换后的字符串结尾处添加空字符(即`pwszUnicode[nWideCharLen] = 0;`),否则可能会出现显示不完整的情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值