不要再纠结在Unicode下含有CString的结构体CFile文件的输入输出了

文件读取成功
对于CString类 这是没法读取的因为无法确定它的大小, 所以一定要避免使用CString存取字符串
对于习惯了vc6.0 在使用vs时,难免会遇到多字节码与统一码转换的困扰
特别是在对文件读写时,这时我们不要去纠结这个,转换肯定会出问题的。
但是微软肯定会想到,所以设计了使wchar_t与char对应 为了移植不出现问题
我建议使用TCHAR 对于字符串建议用_T而不要用L,养成一个好的习惯。


定义的结构体
struct SUser
{
TCHAR sName[20];
TCHAR sPass[10];
TCHAR sPrior[10];
};

退出时写入文件
void CPriorDlg::OnDestroy()
{
CDialog::OnDestroy();
SUser u;
memset(u.sName,_T('\0'),sizeof(u.sName));
memset(u.sPass,_T('\0'),sizeof(u.sPass));
memset(u.sPrior,_T('\0'),sizeof(u.sPrior));
CFile file;  
if(!file.Open(_T("./User.txt"),CFile::modeCreate|CFile::modeWrite))
return;
CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_PRIOR_LIST);
int i = 0,nCount = pList->GetItemCount();
while(i < nCount)
{
pList->GetItemText(i,0,u.sName,sizeof(u.sName));
pList->GetItemText(i,1,u.sPass,sizeof(u.sPass));
pList->GetItemText(i,2,u.sPrior,sizeof(u.sPrior));
file.Write(&u,sizeof(u));
i++;
}
file.Close();
}


启动时读入文件
BOOL CPriorDlg::OnInitDialog()
{


CDialog::OnInitDialog();
CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_PRIOR_LIST);
pList->InsertColumn(0,_T("用户名"),0,150);
pList->InsertColumn(1,_T("密码"),0,150);
pList->InsertColumn(2,_T("权限"),0,120);


CComboBox* pCombo = (CComboBox*)GetDlgItem(IDC_PRIOR_COMBO);
pCombo->AddString(_T("普通"));
pCombo->AddString(_T("高级"));
pCombo->SetCurSel(0);

ReadUsers(pList);
return TRUE;
}
void CPriorDlg::ReadUsers(CListCtrl* pList)
{

CFile file;
SUser u;
//file.Open(L"./User.dat",CFile::modeRead);
if(!file.Open(_T("./User.txt"),CFile::modeRead))
{
AfxMessageBox(_T("failed open file User.dat"));
return;
}


int i = 0;
while(file.Read(&u,sizeof(u)) > 0)
{
CString str;
str.Format(_T("用户名:%s 密码:%s 权限: %s"),u.sName,u.sPass,u.sPrior);
AfxMessageBox(str);
pList->InsertItem(i,u.sName);
pList->SetItemText(i,1,u.sPass);
pList->SetItemText(i,2,u.sPrior);
i++;
}
file.Close();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值