MFC中文本文件内容写入和读出的操作
将txt文件里的内容基于CStdioFile类,while循环一句一句读,并利用分割函数,将文件中一个一个数据项写入vector容器,再利用SetItemTxt函数设置列表内容。增加listctrl,控件变量为m_List,并设置行首名字,我这里还设置了新风格哦~可以设置行首的代码放进初始化函数OnInitDialog()中哦。基于CFile类,将编辑框中的内容赋给一个CString类变量,将这个
咱们今天以通讯录管理系统做例子(*^▽^*),废话不多说直接开始
一、将数据从编辑框写入txt文件
第一件事就是在调试-调试属性-高级-字符集中换成多字节字符集使用哦
头文件中创建需要写入的对象类,
class person {
public:
char name[5];//名字
char address[10];//地址
char phonenum[10];//电话号码
char youbian[10];//邮编
char email[20];//email
char wxnum[10];//微信号
};
并创建编辑框设置控件变量
CString m_name;CString m_address;CString m_phonenum;CString m_youbian;CString m_email;CString m_wxnum;
基于CFile类,将编辑框中的内容赋给一个CString类变量,将这个变量写入txt文件中:
CStdioFile myfile;
CString record;
UpdateData(true);//获得编辑框内容
if (m_name == "" || m_address == "" || m_phonenum == "" || m_youbian == "" || m_email ==""|m_wxnum=="")
{//判断编辑框内容是否为空
MessageBox(_T("信息不能为空"), _T("添加错误"));
return;
}
else
{
myfile.Open(_T("txl.txt"), CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite | CFile::typeText);
//文件名注意修改
p.address == m_address;
//剩余属性类似写 ,p.是类的属性,m_是编辑框控件变量;
p.wxnum == m_wxnum;
record = m_name + _T(" ") + m_address + _T(" ") + m_phonenum + _T(" ") + m_youbian+ _T(" ") + m_email+ _T(" ") +m_wxnum + _T("\n");//分割符为空格 注意换行
MessageBox(record);//弹出写入的内容
myfile.SeekToEnd();
myfile.WriteString(record);
k = MessageBox(_T("添加成功!"), _T("提醒"), MB_YESNO);
if (k == 6)
{
m_name = "";
//剩余编辑框控件变量类似赋空
UpdateData(false);
}
myfile.Close();
}
这样就可以通过编辑框向txt文件里写东西了哦~
二、将txt文件内容读出并显示到listctrl中;
增加listctrl,控件变量为m_List,并设置行首名字,我这里还设置了新风格哦~可以设置行首的代码放进初始化函数OnInitDialog()中哦
LONG IStyle;
IStyle = GetWindowLong(m_List.m_hWnd, GWL_STYLE);
IStyle &= ~LVS_TYPEMASK;
IStyle |= LVS_REPORT;
SetWindowLong(m_List.m_hWnd, GWL_STYLE, IStyle);
DWORD dwStyle = m_List.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;
dwStyle |= LVS_EX_CHECKBOXES;//风格设置
m_List.SetExtendedStyle(dwStyle);
m_List.InsertColumn(0, _T("姓名"), LVCFMT_CENTER, 100);
m_List.InsertColumn(1, _T("地址"), LVCFMT_CENTER, 250);
m_List.InsertColumn(2, _T("电话号码"), LVCFMT_CENTER, 160);
m_List.InsertColumn(3, _T("邮编"), LVCFMT_CENTER, 130);
m_List.InsertColumn(4, _T("E-mail"), LVCFMT_CENTER, 250);
m_List.InsertColumn(5, _T("微信号"), LVCFMT_CENTER, 200);
将txt文件里的内容基于CStdioFile类,while循环一句一句读,并利用分割函数,将文件中一个一个数据项写入vector容器,再利用SetItemTxt函数设置列表内容。
首先是很重要的分割函数,系统不是自带的,我们需要自己在最前面添加哦~
别忘了加头文件~
#include <vector>
#include <string>
vector<string> split(const string& s, const string& seperator) {
vector<string> result;
typedef string::size_type string_size;
string_size i = 0;
while (i != s.size()) {
int flag = 0;
while (i != s.size() && flag == 0)
{
flag = 1;
for (string_size x = 0; x < seperator.size(); ++x)
if (s[i] == seperator[x])
{
++i;
flag = 0;
break;
}
}
flag = 0;
string_size j = i;
while (j != s.size() && flag == 0)
{
for (string_size x = 0; x < seperator.size(); ++x)
if (s[j] == seperator[x])
{
flag = 1;
break;
}
if (flag == 0)
++j;
}
if (i != j) {
result.push_back(s.substr(i, j - i));
i = j;
}
}
return result;
}
然后是在界面初始化函数中添加读出算法,直接上代码~
CString szLine = "";
CStdioFile file;
file.Open("txl.txt", CFile::modeRead);
int i = 0;
while (file.ReadString(szLine))
{
//file.ReadString(szLine);
string str = szLine.GetBuffer();
vector<string> v = split(str, " ");//分隔符,此处以空格 作为分隔符
m_List.InsertItem(i,"");
m_List.SetItemText(i, 0, v[0].c_str());
m_List.SetItemText(i, 1, v[1].c_str());
m_List.SetItemText(i, 2, v[2].c_str());
m_List.SetItemText(i, 3, v[3].c_str());
m_List.SetItemText(i, 4, v[4].c_str());
m_List.SetItemText(i, 5, v[5].c_str());
i++;
}
file.Close();
最后展示一下界面效果图~
到这里就结束啦~感谢阅读~有什么问题联系作者哦~
更多推荐
所有评论(0)